题目描述
不同的人对描述同一种事物的同义词的偏爱程度可能不同。
例如,在说警察时,有人喜欢用 the police,有人喜欢用 the cops。
分析说话方式有助于确定说话者的身份,这在验证诸如和你线上聊天的是否是同一个人十分有用。
现在,给定一段从某人讲话中提取的文字,你能确定他的最常用词吗?
输入格式
输入共一行,包含一个字符串,以回车符 \n 终止。
输出格式
共一行,输出最常用词以及其出现次数。
如果常用词有多个,则输出字典序最小的那个单词。
注意,单词在输出时,必须全部小写。
单词是指由连续的字母和数字构成的,被非字母数字字符或行首/行尾分隔开的,连续序列。
单词不区分大小写。
数据范围
输入字符串长度不超过 10485761048576,且至少包含一个大小写字母或数字。
输入样例
Can1: "Can a can can a can? It can!"
输出样例
can 5
题解
#include<iostream>
#include<map>
#include<bits/stdc++.h>
using namespace std;
int main(){
string s,t;
map<string,int> mp;
int ans=0;
getline(cin,s);
int n=s.size();
for(int i=0;i<n;i++){
if(s[i]>='a'&&s[i]<='z'||s[i]>='0'&&s[i]<='9')
t=t+s[i];
else if(s[i]>='A'&&s[i]<='Z'){
s[i]=s[i]+32;
t=t+s[i];
}
else{
if(!t.size())
continue;
mp[t]++;
ans=max(ans,mp[t]);
t.clear();
}
}
if(s[n-1]>='a'&&s[n-1]<='z'||s[n-1]>='A'&&s[n-1]<='Z'||s[n-1]>='0'&&s[n-1]<='9'){
mp[t]++;
ans=max(ans,mp[t]);
}
for(auto x:mp){
if(x.second==ans){
cout<<x.first<<" "<<ans;
break;
}
}
return 0;
}
这道题用大了哈希表的概念,能很好的帮助我们理解哈希表,谢谢大家。