店长终极推荐
Time Limit: 2000 MS Memory Limit: 65536 K
Total Submit: 743(214 users) Total Accepted: 261(195 users) Rating: Special Judge: No
Description
玩腻了两个工具之后,店长决定要好好学习.玩工具伤身体啊!!店长决定教大家学习阅读,店长总能总学习中找到乐趣,无聊的他找了一篇文章,由各种字符组成,他想统计下这篇阅读中,出现最多次数的相邻两个字符组合是什么?
Input
第一行输入一个整数T表示测试数据组数
接下来输入一行,包括一篇文章,文章由最多不超过200个字符(由任意ascii字符组成)
当T=0时结束
Output
统计文章中出现频度最高的两个连续字符,并且输入然后换行.
如果最高的有多组,按照字典顺序排序后输出第一个.
每T组测试数据后,需要输出一个换行
Sample Input
1
%#@!%#
2
This is a test!
Dianzhang JiaoZhu and Jiashou
Sample Output
%#
is
an
Hint
店长自此开始学习复习考研了,一个神秘人物出现了,传说中的叫兽??敬请期待
Author
void
题解
此题可以用map容器来解决,map容器本身会给键排序,所以正好可以用map来简化做题过程。键为存取的两个字符所组成的字符串,值为出现的次数,使用一个变量记录最大值,之后扫描这个最大值并获得所对应的键并输出就能得到结果。代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using namespace std ;
const int MOD = 1e6 ;
int main(){
int t ;
while ( cin >> t && t ){
getchar() ;
map<string , int> map_ ;
map<string , int>::iterator it ;
while ( t -- ){
map_.clear() ;
string str ;
getline(cin , str) ;
int maxx = -1 ;
for ( int i = 0 ; i < str.size() - 1 ; i ++ ){
string index = str.substr(i , 2) ; //截取str从i开始n个字符的子串
map_[index] ++ ;
maxx = max(map_[index] , maxx) ;
}
for ( it = map_.begin() ; it != map_.end() ; it ++ ){
if ( it->second == maxx ){
cout << it->first << endl ;
break ;
}
}
}
cout << endl ;
}
return 0 ;
}