0
已解决
汤启恩
新手光能
新手光能
想了30分钟了还是不对
50分错误代码:
#include<bits/stdc++.h>
using namespace std;
int b[1001],maxx;
int main(){
int n;
string s;
cin>>n;
getline(cin,s);
getline(cin,s);
for(int i=0;i<n;i++){
int cnt=1;
if(s[i]==s[i+1]){
while(s[i]==s[i+1]){
i++;
cnt++;
}
maxx=max(cnt,maxx);
b[s[i]]=max(b[s[i]],cnt);
}
}
for(int i=0;i<n;i++){
if(b[s[i]]==maxx){
cout<<s[i]<<" ";
b[s[i]]=0;
}
}
cout<<endl<<maxx;
return 0;
}
汤启恩在2020-11-09 21:29:23追加了内容
??????????????????????????
0
已采纳
陈振轩
高级光能
高级光能
这题不是在字符串模拟上讲过吗(
思路:
用桶的思想和字符串模拟的解题方法来写
遍历字符串(从1开始 f[0]初值为1)
遇到与前一个字符串相同的字符
f[i]++
否则
f[i]=0
顺便判断一下f[i]是否大于Max 大于的话就赋值
然后用桶的思想
再次遍历字符串
判断是否与Max相等,且桶[s[i]]为0(设桶的所有元素初值为0)
输出此字符且把桶[s[i]]的值设为1
最后输出换行符和Max即可AC
0
0
0
0
0
李显晨
中级启示者
中级启示者
核心代码:
for(int i=1;i<=n;i++){
if(a[i]==a[i-1]) f[i]=f[i-1]+1;
else f[i]=1;
maxn=max(maxn,f[i]);
}
for(int i=1;i<=n;i++){
if(f[i]==maxn&&b[a[i]]!=0){
cout<<a[i]<<" ";
b[a[i]]=0;
}
}
定义:
char a[1005];
int f[1005],b[200],maxn,n;
输入以及桶计数:
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
b[a[i]]++;
}
最后在输出换行和maxn(前后顺序不要搞反)