题目链接:题目详情 - 1071 Speech Patterns (pintia.cn)
题目大意:统计出一段话中出现最多的词并输出他的出现次数
思路:遍历一遍,再每次提取词之前,把他前面的非有效字符清空,随后如果连续的有效字符则是词,加入哈希表中,最后比较一下输出即可
实现代码:
#include<bits/stdc++.h>
using namespace std;
bool check(char c){
if((c>='0'&&c<='9')||(c>='a'&&c<='z')||c>='A'&&c<='Z') return true;
return false;
}
map<string,int> mp;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
string s;
getline(cin,s);
for(auto &c :s){
c=tolower(c);
}
//全部转换成小写字母
int len=s.length();
for(int i=0;i<len;){
//删除前面的非字符
for(i;i<len&&!check(s[i]);i++);
// if(i==len) break;
int j;
//获得一个词
for(j=i+1;j<len&&check(s[j]);j++);
string temp=s.substr(i,j-i);
i=j;
mp[temp]++;
}
int max_size=0;
string ans;
//统计出现次数最大的词
for(auto t: mp){
if(t.second>max_size){
max_size=t.second;
ans=t.first;
//如果词的出现频率相等,输出字典序最小的那个
}else if(t.second==max_size&&ans>t.first){
ans=t.first;
}
}
cout<<ans<<" "<<max_size<<endl;
return 0;
}