目录:
acwing 771. 字符串中最长的连续出现的字符
acwing 774. 最长单词
acwing 771. 字符串中最长的连续出现的字符
求一个字符串中最长的连续出现的字符,输出该字符及其出现次数,字符串中无空白字符(空格、回车和 tab),如果这样的字符不止一个,则输出第一个。
输入格式
第一行输入整数 NN,表示测试数据的组数。
每组数据占一行,包含一个不含空白字符的字符串,字符串长度不超过200。
输出格式
共一行,输出最长的连续出现的字符及其出现次数,中间用空格隔开。
输入样例:
2
aaaaabbbbbcccccccdddddddddd
abcdefghigk
输出样例:
d 10
a 1
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string a;
getline(cin,a);
while(n--)
{
getline(cin,a);
char b;//b是记录最大长度的字符串
int mx=0;
for(int i = 0;i < a.size();i++)
{
int j = i,cnt=0;
while(a[i] == a[j] && j < a.size())j++,cnt++;
if(cnt > mx)
{
mx = cnt;
b = a[i];
}
i = j-1;//看图
}
cout<<b<<" "<<mx<<endl;
}
return 0;
}
acwing 774. 最长单词
一个以 .
结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式,求句子中的最长单词。
输入格式
输入这个简单英文句子,长度不超过500。
输出格式
该句子中最长的单词。如果多于一个,则输出第一个。
输入样例:
I am a student of Peking University.
输出样例:
University
思路:用双指针算法,i指向起始位置,j寻找字符串的结尾位置,j-i即为字符串的长度,比较长度,用max记下最大的长度
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b;
getline(cin,a);
int max = 0,x,y;
for(int i = 0;i<a.size();i++)
{
int j = i;
while(a[j] !=' ' && j < a.size()) j++;
if(max < j - i)
{
max = j-i+1;
x = i;
y = j;
}
i = j;
}
for(int i = x;i<=y && a[i] != '.';i++)cout<<a[i];
return 0;
}