题目
求一个字符串中最长的连续出现的字符,输出该字符及其出现次数,字符串中无空白字符(空格、回车和tab),如果这样的字符不止一个,则输出第一个。
输入格式
第一行输入整数N,表示测试数据的组数。
每组数据占一行,包含一个不含空白字符的字符串,字符串长度不超过200。
输出格式
共一行,输出最长的连续出现的字符及其出现次数,中间用空格隔开。
输入样例:
2
aaaaabbbbbcccccccdddddddddd
abcdefghigk
输出样例:
d 10
a 1
题解
第一类双指针算法
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--){
string str;
cin>>str;
int cnt=0;
char c;
for(int i=0;i<str.size();i++){ //第一类双指针算法
int j=i;
while(j<str.size()&&str[j]==str[i]) j++; //j不能越界
//循环结束str[j]是和str[i]不相等的第一个字符
//此时i到j这一部分就是和str[i]相等的那一段了
if(j-i>cnt) cnt=j-i,c=str[i];
i=j-1; //因为结束i会再++,所以如果直接i=j,i会跳到j后面一个位置
}
cout<<c<<' '<<cnt<<endl;
}
return 0;
}