解题思路:
为了方便用string流,拿map做了低效的hash,时间还可以承受。
第一步把字符串里的无关字符全部去掉,把大写换成小写,后再统计单词个数即可。
map是自动排序的,所以第一个解就是答案。
代码如下:
#include<cstdio>
#include<iostream>
#include<string>
#include<sstream>
#include<map>
#include<algorithm>
using namespace std;
map<string, int> mp;
bool is_alpha(char a)
{
return (a >= 'a' && a <= 'z')||
(a >= 'A' && a <= 'Z')||
(a >= '0' && a <= '9');
}
bool is_upper(char a)
{
return a >= 'A' && a <= 'Z';
}
int main()
{
string s;
while(getline(cin, s))
{
for(int i = 0; i < s.size(); i++)
if(is_alpha(s[i]))
{
if(is_upper(s[i])) s[i] = s[i] - 'A' + 'a';
}
else s[i] = ' ';
stringstream ss(s);
string word;
int ans = 0;
while(ss >> word)
{
if(!mp.count(word))
{
mp[word] = 1;
ans = max(ans, 1);
}
else
{
int& a = mp[word];
a++;
ans = max(ans, a);
}
}
for(map<string, int>::iterator it = mp.begin(); it != mp.end(); it++)
if(it->second == ans)
{
printf("%s %d\n", (it->first).c_str(), ans);
break;
}
}
return 0;
}