每日一道算法题 7(2023-12-15)
题目描述?
给定一个非空字符串S,其被N个'-'分隔成N+1的子串,给定正整数K,要求除第一个子串外,
?其余的子串每K个字符组成新的子串,并用'-',分隔。
?对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
?反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,
?不做转换
?
?输入描述:
?输入为两行,第一行为参数K,第二行为字符串S。
?
?输出描述
?输出转换后的字符串
?
?用例一
?3
?12abc-abCABc-4aB@
?输出
?12abc-abc-ABC-4aB-@
?
?用例二
?12
?12abc-abCABc-4aB@。
package com.tarena.test.B10;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringJoiner;
/**
?* @author Administrator
?*
?*/
public class B16 {
?? ?public static void main(String[] args) {
?? ??? ?try(Scanner sc = new Scanner(System.in)){
?? ??? ??? ?int k = sc.nextInt();
?? ??? ??? ?String str = sc.next();
?? ??? ??? ?System.out.println(resultStr(k,str));
?? ??? ?}
?? ?}
?? ?
?? ?public static String resultStr(int k,String str) {
?? ??? ?StringJoiner sj = new StringJoiner("-");
?? ??? ?String[] arr = str.split("-");
?? ??? ?sj.add(arr[0]);
?? ??? ?arr[0]="";
?? ?
?? ??? ?
?? ??? ?StringBuilder temp = new StringBuilder();
?? ??? ?Arrays.stream(arr).forEach(temp::append);
?? ??? ?
?? ??? ?for(int i =0,len=temp.length();i<len;i+=k) {
?? ??? ??? ?String subStr= temp.substring(i,Math.min(i+k, len));
?? ??? ??? ?sj.add(change(subStr));
?? ??? ?}
?? ??? ?return sj.toString();
?? ?}
?? ?
?? ?public static String change(String subStr) {
?? ??? ?int lowC = 0;
?? ??? ?int uppC = 0;
?? ??? ?for(int i=0,len=subStr.length();i<len;i++) {
?? ??? ??? ?char c = subStr.charAt(i);
?? ??? ??? ?if(c>='a'&&c<='z') {
?? ??? ??? ??? ?lowC ++;
?? ??? ??? ?}else if(c>='A'&&c<='Z') {
?? ??? ??? ??? ?uppC++;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?if(lowC>uppC) {
?? ??? ??? ?return subStr.toLowerCase();
?? ??? ?}else if(lowC<uppC) {
?? ??? ??? ?return subStr.toUpperCase();
?? ??? ?}
?? ??? ?return subStr;
?? ?}
}
了解知识点
1?StringJoiner 类的使用
2 Math类的使用
3 String 类的toLowerCase,toUpperCase方法的使用。所以大家需要知道String类里面自带了哪些方法
4 stream 流的使用规则
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!