6500详解
本蒟蒻的第一篇题解,可能不是很好QAQ,多多包涵~
话不多说,下面,正片开始
传送门
题目描述 Description
酷町猫和酷酷这天又开始玩游戏了,他们玩的游戏是这样的:酷町猫写一个字符串,酷酷从该字符串中找一个子串,不过这个子串不是随便找的,要求这个子串在原字符串中出现的次数是最多的,请你输出这个次数。
输入描述 Input Description
一行字符串
输出描述 Output Description
一个整数
样例输入 Sample Input
bcbcbcbc
样例输出 Sample Output
4
数据范围及提示 Data Size & Hint
字符串由小写字母组成
字符串长度不超过10的七次方
读完题没思路,俗话说得好:
看样例!
当我把目光移向样例的时候.........
我:@#!@¥@!……&¥#%@¥!#&@#
这个样例.....它真的,我骂死
要不要这么水啊!!
ok读完题我也是一头雾水,完全没有思路〒▽〒
但逝
经过我历经半小时的冥思苦想,也是发现了本题的奥妙之处 (ノ゚▽゚)ノ
开始分析:
题目要求:这个子串在原字符串中出现的次数是最多的
我们可以知道:
这个子串里每个字符出现的次数也是最多的
举例:在“bcbcbcbc”这个字符串中,“bc”是出现次数最多的子串,而每个“bc”里都有一个“b”,所以“b”的出现次数一定是大于等于“bc”的出现次数的。所以,输出是“b”(当然你说“c”也可以)的出现次数“4”
那如果是“bcbcbcbcb”呢,同理,在这个字符串中,“b”是出现次数最多的子串。所以直接输出5就好了
得出结论!
只要统计出现次数最多的字母即可!!
下面附上AC代码↓
(也是非常的短小精悍啊)
#include<bits/stdc++.h>
using namespace std;
int a[200],ans=0;
string s;
int main()
{
cin>>s;
for(int i=0;i<s.size();i++){
a[s[i]]++;//装桶
}
for(int i=97;i<=122;i++){//遍历'a'~'z'
ans=max(ans,a[i]);//找出现次数最多的
}
cout<<ans;
return 0;
}
Bingo~