PAT甲级 1071 说话方式

原题链接

不同的人对描述同一种事物的同义词的偏爱程度可能不同。

例如,在说警察时,有人喜欢用 the police,有人喜欢用 the cops。

分析说话方式有助于确定说话者的身份,这在验证诸如和你线上聊天的是否是同一个人十分有用。

现在,给定一段从某人讲话中提取的文字,你能确定他的最常用词吗?

输入格式
输入共一行,包含一个字符串,以回车符 \n 终止。

输出格式
共一行,输出最常用词以及其出现次数。

如果常用词有多个,则输出字典序最小的那个单词。

注意,单词在输出时,必须全部小写。

单词是指由连续的字母和数字构成的,被非字母数字字符或行首/行尾分隔开的,连续序列。

单词不区分大小写。

数据范围
输入字符串长度不超过 1048576,且至少包含一个大小写字母或数字。

输入样例:
Can1: "Can a can can a can?  It can!"
输出样例:
can 5

我的解法:

#include<bits/stdc++.h>
using namespace std;
bool check(char c){
    if(c>='a'&&c<='z') return true;
    if(c>='A'&&c<='Z') return true;
    if(c>='0'&&c<='9') return true;
    return false;
}
int main(){
    unordered_map<string, int> map;
    string s;
    getline(cin, s);
    for(int i=0;i<s.size();i++){
        if(check(s[i])){
            int j=i;
            string res;
            while(check(s[j])&&j<s.size()){
                res+=tolower(s[j++]);
            }
            map[res]++;
            i=j;
        }
    }
    string word;
    int cnt=-1;
    for(auto item:map){
        if(item.second>cnt||item.second==cnt&&item.first<word){
            word=item.first;
            cnt=item.second;
        }
    }
    cout<<word<<" "<<cnt;
    return 0;
}

收获:

哈希表的使用

猜你喜欢

转载自blog.csdn.net/weixin_45660485/article/details/124919063