资深守护
题目描述 Description
今天老师在课堂上让同学们做了一个有趣的游戏。老师叫小卡卡在黑板上任意写下一串由26个英文字母组成的字母序列。然后,老师要求同学们在最短的时间里找出这个字母序列中哪个字母连续出现的次数最多,并且指出该字母一共连续出现了多少次,最先得到正确答案的同学将赢得游戏。
例如:小卡卡写下的字母序列为ABBAAAACC,其中左边起第1个字母A没有连续出现。第二字母B连续出现了2次。第4个字母A连续出现了4次,第8个字母C连续出现了两次。则在这个字母序列中,第4个字母A连续出现的次数最多,共4次。
请大家编程解决这个问题。
输入描述 Input Description
共两行,第一行为字母序列中的字母个数N(1<N<100),第二行为字母序列。
输出描述 Output Description
共两行,第一行为最多连续出现的次数,第二行为连续出现次数最多的字母。(如出现相同的次数,输出最先出现的)
样例输入 Sample Input
9
ABBAAAACC
样例输出 Sample Output
4
A
数据范围及提示 Data Size & Hint
50%的数据 1<N<50。
100%的数据 1<N<100。
资深天翼
你要思路(A)还是代码(B)?
请选择😀......
~~~~~~~~~~~~~~~~~~~~~~~
好了!下边进入正题!
首先,说思路:
这题可以先从 0 遍历到 s.size()-1(即小于n),然后循环判断:
如果当前单词与下一个单词相同,则说明这一段是连续的字符(
计数器++);如果不同,就说明这一段连续的字符 到下一个
字符就已经停了。再判断,如果 计数器 大于 maxn,maxn 更新为
当前 计数器,mm 更新成 当前字符。最后输出 maxn 和 mm。
然后,是代码 (核心代码的伪代码):
(输入 n 和 s)
s 后边补空格。
循环(0 到 n-1){
如果(当前单词 等于 下一个单词]){
计数器加一
}
否则{
如果(计数器 大于 maxn){
maxn=计数器;
mm=当前单词;
}
计数器归一
}
}
输出 maxn 和 mm。
高级光能
1248这题要用递推:
定义一个数组f->
边界:f[1]=1;
公式:(s为字符串,循环1~s.size()-1)
if(s[i]==s[i-1]) f[i]=f[i-1]+1;
else f[i]=1;
蔡乐毅在2020-11-02 19:24:02追加了内容
答案是max(f[0],f[1]……f[s.size()-1]);
边界写错了是:f[0]=1;
资深守护
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
int sum[100];
int main()
{
int rty;
cin >> rty;
string a;
cin >> a;
char qwe = a[0], s[rty];
int sum1 = 0, ans;
for(int i = 0; i <= rty - 1; i++)
{
if(a[i] == a[i - 1])
{
sum[sum1]++;
}
else
{
sum1++;
s[sum1] = i;
sum[sum1] = 1;
if(ans == sum[sum1 - 1]) ans = ans;
else
{
ans = max(ans, sum[sum1 - 1]);
if(ans = sum[sum1 - 1]) qwe = a[sum1 - 1];
}
}
if(i == rty - 1)
{
if(ans == sum[sum1 - 1]) ans = ans;
else ans = max(ans, sum[sum1]);
}
}
cout << ans << endl;
cout << qwe;
return 0;
}
我做的为什么0分