1557. 說話方式
原題傳送:AcWing 1557. 說話方式
不同的人對描述同一種事物的同義詞的偏愛程度可能不同,
例如,在說警察時,有人喜歡用 the police,有人喜歡用 the cops,
分析說話方式有助于確定說話者的身份,這在驗證諸如和你線上聊天的是否是同一個人十分有用,
現在,給定一段從某人講話中提取的文字,你能確定他的最常用詞嗎?
輸入格式
輸入共一行,包含一個字串,以回車符 \n 終止,
輸出格式
共一行,輸出最常用詞以及其出現次數,
如果常用詞有多個,則輸出字典序最小的那個單詞,
注意,單詞在輸出時,必須全部小寫,
單詞是指由連續的字母和數字構成的,被非字母數字字符或行首/行尾分隔開的,連續序列,
單詞不區分大小寫,
資料范圍
輸入字串長度不超過 1048576 1048576 1048576,且至少包含一個大小寫字母或數字,
輸入樣例:
Can1: "Can a can can a can? It can!"
輸出樣例:
can 5
思路
采用雙指標, i i i 記錄遍歷句子的位置, j j j 記錄單詞中的位置,將每個單詞存入哈希表,最后遍歷哈希表取出詞頻最大并且字典序最小的單詞及其詞頻,
題解
#include <bits/stdc++.h>
using namespace std;
int cnt = -1;
string s, res = "";
unordered_map<string, int> h;
int main()
{
getline(cin, s);
for(int i = 0; i < s.length(); i++)
{
if(isalnum(s[i]))
{
int j = i;
string word = "";
while(j < s.length() && isalnum(s[j]))
word += tolower(s[j++]);
h[word]++;
i = j;
}
}
for(auto i : h)
{
if(i.second > cnt || i.second == cnt && i.first < res)
{
res = i.first;
cnt = i.second;
}
}
cout << res << " " << cnt << endl;
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258686.html
標籤:其他
上一篇:Docker學習隨筆(一)
下一篇:UE4大資料可視化教程(一)
