新浪微博能夠在發言中嵌入「話題」,即將發言中的話題文字寫在一對「#」之間,就能夠生成話題連接,點擊連接能夠看到有多少人在跟本身討論相同或者類似的話題。新浪微博還會隨時更新熱門話題列表,並將最熱門的話題放在醒目的位置推薦你們關注。html
本題目要求實現一個簡化的熱門話題推薦功能,從大量英文(由於中文分詞處理比較麻煩)微博中解析出話題,找出被最多條微博提到的話題。ios
輸入說明:輸入首先給出一個正整數N(≤105),隨後N行,每行給出一條英文微博,其長度不超過140個字符。任何包含在一對最近的#
中的內容均被認爲是一個話題,若是長度超過40個字符,則只保留前40個字符。輸入保證#
成對出現。c#
第一行輸出被最多條微博提到的話題,第二行輸出其被提到的微博條數。若是這樣的話題不惟一,則輸出按字母序最小的話題,並在第三行輸出And k more ...
,其中k
是另外幾條熱門話題的條數。輸入保證至少存在一條話題。spa
注意:兩條話題被認爲是相同的,若是在去掉全部非英文字母和數字的符號、並忽略大小寫區別後,它們是相同的字符串;同時它們有徹底相同的分詞。輸出時除首字母大寫外,只保留小寫英文字母和數字,並用一個空格分隔原文中的單詞。code
4 This is a #test of topic#. Another #Test of topic.# This is a #Hot# #Hot# topic Another #hot!# #Hot# topic
剛開始沒有思路,網上了解了一下題意後,感受這題不難,代碼:
Hot 2 And 1 more ...
#include<iostream> #include<map> #include<cstdio> #include<vector> #include<cstring> #include<algorithm> #include<cctype> using namespace std; string trans(string s){ string ss; for(int i=0;i<s.size();i++){ if(s[i]>='A'&&s[i]<='Z')s[i]=tolower(s[i]); else if(s[i]>='a'&&s[i]<='z'||s[i]>='0'&&s[i]<='9')s[i]=s[i]; else s[i]=' '; } if(s[0]==' ')for(int i=1;i<s.size();i++) ss.push_back(s[i]); else if(s[(s.size()-1)]==' ')for(int i=0;i<s.size()-1;i++)ss.push_back(s[i]); else ss=s; return ss; } int main(){ int n; char st[1000]; vector<int> v; map<string ,int > flag; map<string ,int > m; cin>>n;getchar(); for(int i=0;i<n;i++){ flag.clear(); gets(st); string s=st; v.clear(); for(int i=0;s[i];i++){ if(s[i]=='#') v.push_back(i); } while(v.size()){ int a=v.front(); v.erase(v.begin()); int b=v.front(); v.erase(v.begin()); string s1=s.substr(a+1,b-a-1); string s2= trans(s1);//cout<<endl<<s2<<"$$$$$$$$"<<endl; s2[0]=toupper(s2[0]); if(!flag[s2]){ m[s2]++; flag[s2]=1; } } } int cnt=0; int maxn=0; string topic; map<string ,int >::iterator it; for(it= m.begin();it!=m.end();it++){ string key=it->first; int value = it->second; // cout<<"##########value"<<value<<" key"<<key<<endl; if(value>maxn){ maxn=value; cnt=0; topic=key; } else if(value==maxn)cnt++; } cout<<topic<<endl<<maxn<<endl; if(cnt) cout << "And " << cnt << " more ..." << endl; return 0; }