题目描述
求一个字符串中最长的连续出现的字符,输出该字符及其出现次数,字符串中无空白字符(空格、回车和tab),如果这样的字符不止一个,则输出第一个。
输入格式
第一行输入整数N,表示测试数据的组数。
每组数据占一行,包含一个不含空白字符的字符串,字符串长度不超过200。
输出格式
共一行,输出最长的连续出现的字符及其出现次数,中间用空格隔开。
样例
输入样例:
2
aaaaabbbbbcccccccdddddddddd
abcdefghigk
输出样例:
d 10
a 1
算法1
(滑动窗口) O(n)
滑动窗口 使用l r变量记录字符串的相同区间 并与ans进行比较 记录最佳答案
然后l=当前r+1 进入下一个区间的尝试
C++ 代码
#include <iostream>
using namespace std;
int t;
void Check(string& s)
{
int l = 0, r = 0; int ans = -1;
char c;
while (l < s.size() && r < s.size())
{
r = l;
while (s[r] == s[r + 1] && r < s.size()) {
r++;
}
if (ans < (r - l + 1)) {
ans = (r - l + 1);
c = s[r];
}
l = r+1;
}
cout <<c<< " "<< ans << endl;
}
int main()
{
cin >> t;
while(t--){
string s;
cin >> s;
Check(s);
}
return 0;
}