c 网站开发 图书下载,安徽省建设工程网上服务平台,wordpress魔客模板,怎样做软件网站一 #xff1a;题目
新浪微博可以在发言中嵌入“话题”#xff0c;即将发言中的话题文字写在一对“#”之间#xff0c;就可以生成话题链接#xff0c;点击链接可以看到有多少人在跟自己讨论相同或者相似的话题。新浪微博还会随时更新热门话题列表#xff0c;并将最热门的…一 题目
新浪微博可以在发言中嵌入“话题”即将发言中的话题文字写在一对“#”之间就可以生成话题链接点击链接可以看到有多少人在跟自己讨论相同或者相似的话题。新浪微博还会随时更新热门话题列表并将最热门的话题放在醒目的位置推荐大家关注。
本题目要求实现一个简化的热门话题推荐功能从大量英文因为中文分词处理比较麻烦微博中解析出话题找出被最多条微博提到的话题。
输入格式: 输入说明输入首先给出一个正整数N≤10 5 随后N行每行给出一条英文微博其长度不超过140个字符。任何包含在一对最近的#中的内容均被认为是一个话题输入保证#成对出现。
输出格式: 第一行输出被最多条微博提到的话题第二行输出其被提到的微博条数。如果这样的话题不唯一则输出按字母序最小的话题并在第三行输出And k more …其中k是另外几条热门话题的条数。输入保证至少存在一条话题。
注意两条话题被认为是相同的如果在去掉所有非英文字母和数字的符号、并忽略大小写区别后它们是相同的字符串同时它们有完全相同的分词。输出时除首字母大写外只保留小写英文字母和数字并用一个空格分隔原文中的单词。
输入样例:
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 ...二思路分析
思路想办法将# #中的数据提取出来然后用map容器进行存储m[str] 1;如果出现相同的话题 那就加一(没有重复的m[str]是默认为 0 的也就是最后的m[str] 1) 接下来map容器当中最后一个值就是最大的当然可能会出现重复的但没关系我们再根据已知 的最大值即可求取然后相同话题的个数也就是 题目要求输出的第二项
这里我用的是set容器将每条为微博中的话题提取出来 还有需要注意的是 这道题不是让统计话题的个数最多的是看每一条微博里提到的话题 无论一条微博里提到几次都统计为这一条微博出现的话题。
三上码
/**思路想办法将# #中的数据提取出来然后用map容器进行存储m[str] 1;如果出现相同的话题那就加一(没有重复的m[str]是默认为 0 的也就是最后的m[str] 1)接下来map容器当中最后一个值就是最大的当然可能会出现重复的但没关系我们再根据已知的最大值即可求取然后相同话题的个数也就是 题目要求输出的第二项这里我用的是set容器将每条为微博中的话题提取出来*/#includebits/stdc.h
using namespace std;setstrings[100010];
setstring:: iterator st; //提取字符串中# #中间的内容
void deal(string str,int x){int flag 0; int count 0;string word ;//字符串初始化string str1 ;str !;//给字符串末尾加个结束标志 for( int i 0; i str.size(); i ){//This is a #test of topic#.if( str[i] #){flag 1;count;if( i str.size() - 1)i;}if( isalpha(str[i]) flag 1 || isdigit(str[i]) flag 1){//判断该字符是否为字母 || 数字 if( isalpha(str[i])) word tolower(str[i]);//将大写英文字母改为小写英文字母 if( isdigit(str[i]))word str[i]; }else if( flag 1 ) {//这里flag 1 保证取出的字符为##里头的// cout word endl;if( word ! ) str1 word;word ;//清理掉上次的单词存入新的单词 (并且给除第一个单词外的其他单词加上空格)}//代表一个话题里的热点 if( count 2){flag 0;count 0;//可能一行中有多个#号if(str1 ! )s[x].insert(str1);word ; //当一条语句当中会有两遍热点话题那么的话(因为在最后执行完str1后 word又被赋值为 ,而新的热点开头需要的是无空格)str1.clear(); }} } int main(){int N;mapstring,intm2;mapstring,int::iterator t; cin N; getchar();for( int i 0; i N; i ){string str;getline(cin,str);deal(str,i);for( st s[i].begin(); st ! s[i].end(); st ){m2[*st] 1; }} // cout ****************** endl;int max 0; for( t m2.begin(); t ! m2.end(); t ){if( t-second max ){max t-second;} }// cout max endl;int num; for( t m2.begin(); t ! m2.end(); t ){if( t-second max ){string str t-first;str[0] toupper(str[0]);cout str endl;cout t-second endl;num t-second;break;} }int count -1;//把自己先排除掉 for( t m2.begin(); t ! m2.end(); t ){if(t-second num )count;}//cout m2.size() endl;if( count 0)cout And count more ...;} //4
//This is a #test of topic#.
////This is a #Hot# #Hot# topic
//Another #hot!# #Hot# topic//1
//This is a #test of topic#.//1
//Another #hot!# #Hot# topic//Another #Hot# topic//4
//This is a #test of topic#.
//Another #Test of topic.# #Hot#
//This is a #Hot# #Hot# topic
//Another #hot!# #Hot# topic//
//Another #Test1 of topic.#
//This is a #test of topic#.//Another #hot!# #Hot# topic 四总结
最后有一个点有刚开始一直段错误那是因为我上方set开的范围太小了加大范围比题目的10的5次方大就行 加油boy!
五知识速递如果对map容器和set容器不熟悉的兄弟们来这里学习一下哈
map的基本用法 set的基本用法