原题链接:1071 Speech Patterns (25分)
题目大意:
给定一行字符串,让你找到出现最多的某个单词(单词可以包含:大小写字母和数字,不包括空格或者其他字符)。
输出该单词和出现的次数,注意:不区分字母的大小写。
分析:
因为要统计每个单词出现的次数,所以我们利用 map 这个数据结构。
读入一行字符串,根据要求检测是否违规,然后检测其(这里要转换成小写,用到了tolower()
)出现的次数,存入 map 中。
满分代码:
#include <iostream>
#include <string.h>
#include <algorithm>
#include <unordered_map>
#define inf 0x3f3f3f3f
typedef long long LL;
using namespace std;
const int MAXN = 1e3+10;
bool check(char c) {
if(c >= '0' && c <= '9') return true;
if(c >= 'a' && c <= 'z') return true;
if(c >= 'A' && c <= 'Z') return true;
return false;
}
int main() {
string str;
getline(cin, str);
unordered_map<string, int> hash; // string 出现的次数
for(int i = 0; i < str.size(); i++) {
if(check(str[i])) {
string word; // 用来暂存每一个单词
int j = i;
while(j < str.size() && check(str[j])) {
word += tolower(str[j++]);
}
hash[word]++; // 表示该单词的数量++
i = j;
}
}
string word;
int cnt = -1;
for(auto item: hash) {
if(item.second > cnt || (item.second == cnt && item.first >word)) {
word = item.first;
cnt = item.second;
}
}
cout << word << " " << cnt << endl;
return 0;
}