題目大意是說給出一個文本,找出里面出現最多的單詞,如果有多個單詞出現次數一樣多,則輸出字典序最小的。
需要注意的是:
給出的文本字符串不僅有數字還有字母,還有一些特殊的字符,還有空格。
而單詞是只包含字母和數字,它是由非字母和數字分割的(這里一定要讀懂題意)
Here a "word" is defined as a continuous sequence of alphanumerical characters separated by non-alphanumerical characters or the line beginning/end.
注意字母不區分大小寫,但給出的文本中大小寫字母都存在
Note that words are case insensitive.
當弄懂題意后,實際的思路還是比較簡單的,我們只需要先把單詞從整個字符串里面取出,然后放入哈希表中,最后輸出出現次數最多的單詞。
注意,不同的單詞是用空格分割的,那么最后一個單詞可能會不被統計,
因此最后要進行一個判斷
for(int i=0;i<s.size();i++){if(s[i]!=' '){a+=s[i];//cout<<"1";}else{if(a.size()>0){mp[a]++;a.clear(); }}}if(a.size()>0){mp[a]++;}
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <unordered_map>
#include <limits.h>
using namespace std;
int N;
int D;
string s;
unordered_map<string,int> mp;
int main()
{//ios::sync_with_stdio(0),cin.tie(0),cout.tie(getline(cin,s);for(int i=0;i<s.size();i++){if(s[i]>='A'&&s[i]<='Z'){s[i]=char(s[i]-'A'+'a');}if((s[i]>='0'&&s[i]<='9')||(s[i]>='a'&&s[i]<='z')){}else{s[i]=' ';}} string a;for(int i=0;i<s.size();i++){if(s[i]!=' '){a+=s[i];//cout<<"1";}else{if(a.size()>0){mp[a]++;a.clear(); }}}if(a.size()>0){mp[a]++;}int maxx=INT_MIN;string temp;for(auto it:mp){if(it.second>maxx){maxx=it.second;temp=it.first;}else if(it.second==maxx){if(temp>it.first){temp=it.first;}}}cout<<temp<<" "<<maxx;return 0;}
考察點是哈希表和對字符串的操作,一定要讀懂題意。