题目描述
给定一个字符串,在字符串中寻找第一个连续出现次数不低于 k 次的字符。
输入格式
22 行。第 11 行是 k;第 22 行是仅包含大小写字母的字符串。
输出格式
字符串中第一个连续出现次数不低于 k
次的字符。如果没有符合条件的字符,输出 No
。
输入样例
3
abcccaaab
输出样例
c
主函数之前的就不多说了,直接开始:
1.首先定义和要找的连续字母的个数与计数器并输入连续字母的个数与储存字符的字符数组a
char a[114514]; //开114514是为了防错
int k,cnt=1; //cnt用来做计数器
cin>>k>>a; //输入连续字母的个数与储存字符的字符数组a
2.核心代码,先判断,计数器自增;再判断,计数器归一;最后判断是否满足条件,输出后结束
for(int i=1;i<strlen(a);++i){ //在for循环中定义i=1并不断增加至a的长度
if(a[i]==a[i-1]){ //如果第i项等于i-1项(也就是前一项)
cnt++; //计数器加一
}else{ //如果出现其他情况或不满足条件
cnt=1; //计数器清零归一
}if(cnt>=k){ //如果计数器的数大于或等于输入的连续字母的个数
cout<<a[i]; //输出连续的字母
exit(0); //结束程序,效果与return 0相同
}
}
3.如果所有条件都不满足则输出No,再结束程序
cout<<"No"; //输出不满足
return 0; //结束程序
最后附上完整代码(无注释):
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[114514];
long long int k,cnt=1;
cin>>k>>a;
for(int i=1;i<strlen(a);++i){
if(a[i]==a[i-1]){
cnt++;
}else{
cnt=1;
}if(cnt>=k){
cout<<a[i];
exit(0);
}
}
cout<<"No";
return 0;
}