7-46 新浪微博热门话题 (30 分)(思路+详解+set + map)pta逐个点过的 来呀兄弟们

一 :题目

新浪微博可以在发言中嵌入“话题”,即将发言中的话题文字写在一对“#”之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题。新浪微博还会随时更新热门话题列表,并将最热门的话题放在醒目的位置推荐大家关注。

本题目要求实现一个简化的热门话题推荐功能,从大量英文(因为中文分词处理比较麻烦)微博中解析出话题,找出被最多条微博提到的话题。

输入格式:
输入说明:输入首先给出一个正整数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容器将每条为微博中的话题提取出来*/#include<bits/stdc++.h>
using namespace std;set<string>s[100010]; 
set<string>:: 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;map<string,int>m2;map<string,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的基本用法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作十余年,还是一直被问 委托和事件 有什么区别? 真是够了

一&#xff1a;背景1. 讲故事前几天公司一个妹子问我&#xff0c;事件和委托有什么区别&#xff1f;先由衷感叹一下&#xff0c;编码十余年&#xff0c;年轻的时候常被面试官问起&#xff0c;现在年长了&#xff0c;却被后辈们时常问候&#xff0c;看样子逃离编码生涯之前是跑不…

7-47 打印选课学生名单 (25 分)(两种做法)(思路加详解+map+vector做法+最后一个点超时解决)+兄弟们冲丫丫

一&#xff1a;题目 假设全校有最多40000名学生和最多2500门课程。现给出每个学生的选课清单&#xff0c;要求输出每门课的选课学生名单。 输入格式: 输入的第一行是两个正整数&#xff1a;N&#xff08;≤40000&#xff09;&#xff0c;为全校学生总数&#xff1b;K&#xf…

linux取设备分辨率,linux 获取系统屏幕分辨率

三步将Node应用部署到Heroku上Heroku是一个提供快速部署服务的云平台.支持Node,Ruby,Java,PHP,Python,Go多种语言,今天体验了下,简直不要太爽.下面简单的介绍一下. 首先还是要注册一个账号:https: ...jQuery操作Table tr td常用的方法虽然现在DIVCSS进行页的布局大行其道,但是很…

SwaggerUI看烦了,IGeekFan.AspNetCore.Knife4jUI 帮你换个新皮肤

背景好像是上周四&#xff0c;看到微信群有人说java有轮子swagger-bootstrap-ui&#xff0c;而c#&#xff0c;就是找不到。于是我一看&#xff0c;就说大话&#xff1a;“这个只是一套UI&#xff0c;他这个有开源地址么”被at说:你试试...当天晚上就把swagger-ui, Knife4j,Swas…

7-48 银行排队问题之单窗口“夹塞”版 (30 分)(思路和详解+map做法)来呀Baby!

一&#xff1a;题目 排队“夹塞”是引起大家强烈不满的行为&#xff0c;但是这种现象时常存在。在银行的单窗口排队问题中&#xff0c;假设银行只有1个窗口提供服务&#xff0c;所有顾客按到达时间排成一条长龙。当窗口空闲时&#xff0c;下一位顾客即去该窗口处理事务。此时如…

linux 启动程序 绑定id,linux如何根据进程ID查找启动程序的路径

昨天遇到一个问题,背景是这样的:我们工作环境不正常,使用ps命令查看,发现有程序A的两个进程状态一个是状态,一个是正常运行.由于该程序A是个通用服务程序,被拷贝成多份,分发到不同的目录中单独启动,只有各自配置不同而已,因此想知道是哪个目录的A程序处于僵死状态.正常运行中的…

7-49 打印学生选课清单 (25 分)(思路+详解+map做法(一对多)+超时解决)Come baby!

一&#xff1a;题目 假设全校有最多40000名学生和最多2500门课程。现给出每门课的选课学生名单&#xff0c;要求输出每个前来查询的学生的选课清单。 输入格式: 输入的第一行是两个正整数&#xff1a;N&#xff08;≤40000&#xff09;&#xff0c;为前来查询课表的学生总数&…

记一次批量处理数据库中的敏感信息

前言 对于一些敏感数据&#xff0c;往往会对其加密后再入库&#xff0c;这个是对数据安全性的一个最为简单的措施。最常见的莫过于手机号码和身份证号了&#xff0c;相信还是有不少公司对这些敏感信息是明文存储的。万一被别人发现系统漏洞&#xff0c;或者是被拖库&#xff0c…

修改linux路径,科学网-修改linux终端路径颜色-胡涛的博文

PuTTY或者Terminal路径默认颜色非常难看&#xff0c;如何修改&#xff1f;第一步&#xff0c;配置文件&#xff1a;命令行&#xff1a;dircolors -p > ~/.dircolors第二步&#xff0c;修改文件&#xff1a;使用vi打开~/.dircolors 文件&#xff0c;找到这一行&#xff1a; D…

7-50 畅通工程之局部最小花费问题 (35 分)(思路加详解)来呀兄弟们冲呀呀呀呀呀呀呀

一&#xff1a;题目 某地区经过对城镇交通状况的调查&#xff0c;得到现有城镇间快速道路的统计数据&#xff0c;并提出“畅通工程”的目标&#xff1a;使整个地区任何两个城镇间都可以实现快速交通&#xff08;但不一定有直接的快速道路相连&#xff0c;只要互相间接通过快速…

十多位全球技术专家,为你献上近十个小时的.Net微服务介绍

.Net Conf: Focus on Microservices 是 .Net Conf 社区在 2020 年 7 月 30 日举办的线上分享活动。整个活动视频长达近 10 个小时。今天我们来看看都发生了什么。章节汇总本次分享由十多位来自全球的资深技术专家在线分享&#xff0c;涵盖了当前 .Net 在微服务领域的利器。包括…

向linux内核增加新的系统调用,为linux内核添加新的系统调用

为linux内核添加新的系统调用作者&#xff1a;李志勇更多精彩&#xff1a;更多精彩&#xff1a;开发平台&#xff1a;x86 ubuntu目标平台&#xff1a;S3C6410linux3.4.4一、 打开内核源码目录下arch/arm/kernel/calls.S文件&#xff0c;在389行添加&#xff1a;/*378 */CALL…

5G发展是绵绵秋雨 应循序渐进

现阶段5G技术成熟度有待提升当下&#xff0c;在行业内5G基站的短板被调侃为“覆盖、成本、功耗三个3”&#xff0c;也就是3倍成本&#xff0c;3倍功耗、1/3覆盖。就功耗来说&#xff0c;5G基站是4G基站功耗的3倍左右。中国移动董事长杨杰就在GTI国际产业峰会表示&#xff0c;“…

7-52 两个有序链表序列的交集 (20 分)(思路加详解尾插法)come Boby!

一&#xff1a;题目 已知两个非降序链表序列S1与S2&#xff0c;设计函数构造出S1与S2的交集新链表S3。 输入格式: 输入分两行&#xff0c;分别在每行给出由若干个正整数构成的非降序序列&#xff0c;用−1表示序列的结尾&#xff08;−1不属于这个序列&#xff09;。数字用空…

linux可疑程序,linux可疑程序追踪

今天的主角是旁边的服务器&#xff0c;学姐的Fedora。发生的情况和我的那台ubuntu类似。(看来是一起被黑了)连接虽挡&#xff0c;进程犹在其实昨天已经发现学姐的系统出问题了&#xff0c;采取的措施和我那台一样&#xff0c;iptables直接DROP和可疑IP的连接。今天学姐说&#…

明源云创CI/CD技术演进

源宝导读&#xff1a;在敏捷迭代的过程中需要能够快速的把开发的代码集成打包部署到各个环节对应的环境中。为了高效稳定的完成这个工作&#xff0c;我们引入了DevOps实践理论&#xff0c;并形成了配套的CI/CD工具。本文将介绍云创的CI/CD工具如何演进的过程。一 、传统构建在最…

7-51 两个有序链表序列的合并 (20 分)(vector做法)

一 &#xff1a;题目 、已知两个非降序链表序列S1与S2&#xff0c;设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行&#xff0c;分别在每行给出由若干个正整数构成的非降序序列&#xff0c;用−1表示序列的结尾&#xff08;−1不属于这个序列&#xff…

linux qt4卸载,linux卸载QT4和安装QT5的方法

由于项目中需要用到QT的程序&#xff0c;因此安装QT5的软件支持库和QT开发环境是必须的&#xff1a;apt-get insatall qt5-defaultapt-get insatall qt-creatorQT5的库和QT Creator开发环境是独立运行的&#xff0c;如果QT Creator缺少QT5的库则程序写好了没法编译&#xff1b;…

7-53 两个有序序列的中位数 (25 分)(思路加详解)用STL容器中的set容器的自动去重过不去

一&#xff1a;题目 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A 0 ​ ,A 1 ​ ,⋯,A N−1 ​ 的中位数指A (N−1)/2 ​ 的值,即第⌊(N1)/2⌋个数&#xff08;A 0 ​ 为第1个数&#xff09;。 输入格式: 输入分三行。第一行给出序列的公共长…

Blazor带我重玩前端(五)

概述本文主要讨论Blazor事件内容&#xff0c;由于blazor事件部分很多&#xff0c;所以会分成上下两篇&#xff0c;本文为第一篇&#xff0c;后续会有第二篇。我们可以视组件是一个类&#xff0c;我们先看一下前文所说的Index.Razor页面生成的C#代码。在此&#xff0c;先补充一下…