祝福语【算法赛】
题目来源:第 27 场 蓝桥入门赛【算法题】
可以参考一下,本人也是比较菜
不喜勿喷,求求求
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String S = sc.nextLine();
int max=0;
int count=0;
for (int i = 0; i < S.length(); i++) {
if(S.charAt(i)=='a'){
count++;
max=Math.max(count,max);
// 计算S中最多有多少个连续的a
}
else count=0;
}
for (int i = 0; i <= max; i++) {
System.out.print('a');
}
}
}
分析
-
输入处理:
Scanner sc = new Scanner(System.in); String S = sc.nextLine();
这两行代码用于从标准输入读取一个字符串 SS。
-
初始化变量:
int max = 0; int count = 0;
变量
max
用于记录字符串 SS 中连续出现的最多的 ‘a’ 的个数。变量count
用于计数当前连续出现的 ‘a’ 的个数。 -
遍历字符串 S*S*:
for (int i = 0; i < S.length(); i++) { if (S.charAt(i) == 'a') { count++; max = Math.max(count, max); // 计算S中最多有多少个连续的'a' } else { count = 0; } }
这个循环遍历字符串 SS,检查每个字符是否为 ‘a’。如果是 ‘a’,则增加
count
并更新max
为count
和max
中的较大值。如果不是 ‘a’,则将count
重置为 0。 -
输出结果:
for (int i = 0; i <= max; i++) { System.out.print('a'); }
这个循环输出
max + 1
个 ‘a’。这是因为我们需要确保输出的字符串 TT 不是 SS 的子串,而 SS 中最多有max
个连续的 ‘a’,所以输出max + 1
个 ‘a’ 可以保证 TT 不是 SS 的子串。
总结
这段代码通过计算字符串 SS 中连续出现的最多的 ‘a’ 的个数,并输出比这个数量多一个的 ‘a’ 字符串作为 TT,从而保证了 TT 不是 SS 的子串,并且是字典序最小的可能字符串。
有更好的方法欢迎留言和交流