题目描述:
小X喜欢研究字符串。这天,小X随手在草稿纸上写下了一个大写字母字符串。此时,班长把成绩报告单发到了每位同学的手上。小X看到自己每门都是A(优秀),非常高兴,灵光一闪,想到了一个问题:在刚刚写下的字符串中,字母A连续出现了多少次呢?小X立刻数了起来。但这个字符串实在是太长了,希望你能帮帮他。
输入
第一行包括一个整数N,表示字符串长度。
第二行包含一个字符串。
输出
包含一个整数,表示改字符串中字母A最多连续出现的次数。
样例组:
输入:
5 BAACA
输出:
2
数据范围:
对于30%的数据,N不大于100。
对于60%的数据,N不大于1000。
对于100%的数据,N不小于1且不大于100000。
解析+思路
这是一道比较简单的字符串题。
这道题目主要就是输入由N个字符组成的字符串,再直接遍历一遍,求出字母A最多连续出现的次数,最后输出就完事了
这道题主要需要注意两点。
第一点是输入。如果你用的是string类,那最好不要直接输入字符串(当然这道题也能过)。建议使用以下输入程序:
string getstr(int n)
{
char c;string s="";
for(int i=1;i<=n;i++)//或while(n--)
{
cin>>c;//c=getchar();
s=s+c;
}
return s;
}
第二点是遍历。有两种方法:第一种是for+while循环,第二种是for里面用if-else。第一种写法如下:
int getans(string s)
{
int sum=0,ans=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='A')
{
while(s[i]=='A'){i++;sum++;}
ans=max(ans,sum);sum=0;
}
}
return ans;
}
但第一种写法要用到循环嵌套,编程小白调试起来比较麻烦。因此我更推荐第二种if+else的写法。第二种写法如下:
int getans(string s)
{
int sum=0,ans=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='A') sum++;
else ans=max(ans,sum),sum=0;
}
return ans;
}
程序段如下:
#include<bits/stdc++.h>
using namespace std;
int n,ans=0,sum=0;string s;char c;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>c;
s=s+c;
}//输入字符串
for(int i=0;i<s.size();i++)//s.size()就是n
{
if(s[i]=='A') sum++;
else{ans=max(ans,sum);sum=0;}
}
cout<<ans;
return 0;
}
这道题目也可以用字符数组做。只要稍微改一些东西(如s.size()要改为strlen(s),也就是n),而且输入还更加简洁。程序段如下:
#include<bits/stdc++.h>
#define maxn 1000001
using namespace std;
int n,ans=0,sum=0;char s[maxn];
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>s[i];//输入字符串(简洁明了)
for(int i=0;i<n;i++)//strlen(s)
{
if(s[i]=='A') sum++;
else{ans=max(ans,sum);sum=0;}
}
cout<<ans;
return 0;
}
这道题目就这么多。