Codeforces - 1105B. Zuhair and Strings 字符串模拟
题目
给你一个字符串有 n
个字符,给你一个 k
。要你求字符串的等级。
字符串的等级定义为:
- 等级定义为字符串中最大的连续片段的次数;
- 而连续片段就是当有
k
个连续相同的字符的时候,这个字符的连续片段数就+1
;
解析
思路:
- 遍历字符串,每次看当前字符和前一个字符是否相同,如果相同就累加一个
cnt
遍历,表示当前的相同的数目; - 如果不同,记得重新置
cnt = 1
; - 然后判断当前
cnt == k
,如果已经达到k
,就累加这个字符的等级; - 最终结果就是在所有的字符的等级中取一个最大的即可;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(new BufferedInputStream(System.in));
PrintStream out = System.out;
int n = in.nextInt();
int k = in.nextInt();
char[] chs = in.next().toCharArray();
int[] counts = new int[53];
if(k == 1)
counts[chs[0] - 'a']++;
int cnt = 1;
for(int i = 1 ; i < n; i++){
if(k == 1){
counts[chs[i] - 'a']++;
continue;
}
if(chs[i] == chs[i-1]){
cnt++;
if(k == cnt){
counts[chs[i] - 'a']++;
chs[i] = '#'; // to be a special character
cnt = 1;
}
}else // remember this when not consecutive
cnt = 1;
}
long res = 0;
for(int count : counts)
res = Math.max(res, count);
out.println(res);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论