7-18(查找) 新浪微博熱門話題(30 分)

新浪微博能夠在發言中嵌入「話題」,即將發言中的話題文字寫在一對「#」之間,就能夠生成話題連接,點擊連接能夠看到有多少人在跟本身討論相同或者類似的話題。新浪微博還會隨時更新熱門話題列表,並將最熱門的話題放在醒目的位置推薦你們關注。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;

}
相關文章
相關標籤/搜索