华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。
输入为两行,第一行为参数K,第二行为字符串S。
输出转换后的字符串。
输入 | 输出 | 说明 |
---|---|---|
3 12abc-abCABc-4aB@ | 12abc-abc-ABC-4aB-@ | |
12 12abc-abCABc-4aB@ | 12abc-abCABc4aB@ |
题目刷多了的话,一看这道题,第一反应就是没意思。。
完全根据题意去做就可以了,美其名曰“逻辑分析”。
要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;
大小写字母的数量相等时,不做转换。
秒懂吧?
package com.guor.od;
import java.util.*;
public class OdTest02 {
/**
* 要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
*
* 对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
* 反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;
* 大小写字母的数量相等时,不做转换。
*
* 3
* 12abc-abCABc-4aB@
* 12abc-abc-ABC-4aB-@
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int K = Integer.valueOf(sc.nextLine());
String S = sc.nextLine();
// 除第一个子串外
String first = S.split("-")[0];
StringBuilder builder = new StringBuilder();
builder.append(first).append("-");
// 除了第一个字符串的余下字符串
String line = S.replaceFirst(first + "-", "").replace("-", "");
// 不满K个字符,直接拼接
if (line.length() <= K) {
builder.append(line).append("-");
} else {
while (line.length() > 0) {
// 每K个字符一截取
if (line.length() > K) {
String temp = line.substring(0, K);
line = line.replaceFirst(temp, "");
builder.append(transfer(temp)).append("-");
} else {
builder.append(transfer(line)).append("-");
line = "";
}
}
}
// 去掉最后一个-
builder.deleteCharAt(builder.length()-1);
System.out.println(builder);
}
/**
* 如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
* 反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;
* 大小写字母的数量相等时,不做转换。
*/
static String transfer(String str) {
int upper = 0;
int lower = 0;
char chArr[] = str.toCharArray();
for (char c : chArr) {
if (c >= 'a' && c <= 'z') {
lower++;
}else if(c >= 'A' && c <= 'Z'){
upper++;
}
}
if (upper > lower) {
str = str.toUpperCase();
} else if (upper < lower) {
str = str.toLowerCase();
}
return str;
}
}
3
Nezha-Loves-@LEarnIng-##Java
Nezha-lov-es@-LEA-rni-ng#-#Ja-va
下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。