题干:求一个字符串中最长的连续出现的字符,输出该字符及其出现次数,字符串中无空白字符(空格、回车和 tabtab),如果这样的字符不止一个,则输出第一个
输入格式
第一行输入整数 NN,表示测试数据的组数。
每组数据占一行,包含一个不含空白字符的字符串,字符串长度不超过 200200。
输出格式
共一行,输出最长的连续出现的字符及其出现次数,中间用空格隔开。
这个题难度中等,再写这个题之前需要了解一个算法叫做第一类双指针算法:
大概代码:
for(int i=0;i<size;i++){
int j=i;
while(j<size&& s[i]==s[j]){
i=j-1;//跳过相同的字符
}
}
明白这个之后就很容易写这道题了
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
while(n--){
string str;
cin>>str;
int c=0;//用于保存相同字符个数
char d;//用于保存字符
for(int i=0;i<str.size();i++){
int j=i;
while(j<str.size()&&str[i]==str[j])j++;
if(j-i>c){c=j-i;d=str[i];}//保留出现次数最多的字符
i=j-1;//跳过相同的字符
}
cout<<d<<" "<<c<<endl;
}
return 0;
}
大概的解题思路就是这样了。