7-46 新浪微博热门话题 (30 分)
新浪微博可以在发言中嵌入“话题”,即将发言中的话题文字写在一对“#”之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题。新浪微博还会随时更新热门话题列表,并将最热门的话题放在醒目的位置推荐大家关注。
本题目要求实现一个简化的热门话题推荐功能,从大量英文(因为中文分词处理比较麻烦)微博中解析出话题,找出被最多条微博提到的话题。
输入格式:
输入说明:输入首先给出一个正整数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 …
解答:
#include<iostream>
#include<map>
#include<string>
#include<vector>using namespace std;typedef struct T {//提到次数int times;//最后一次微博提到位置int last;
}Topic;map<string, Topic> all_record;
vector<string> all_topic;
map<string, Topic>::iterator it;int main() {string text, undeal_topic;int line, i, j, begin, end, len, start, mark_deal_pos,insert_pos=0;cin >> line;getchar();bool is_space;//读取数据for (i = 0; i < line; i++) {getline(cin, text);//处理数据mark_deal_pos = 0;while (1) {Topic topic;begin = text.find('#', mark_deal_pos);if (begin != -1) {//下一位是否可以为空格is_space = false;char deal_topic[150];start = 0;end = text.find('#', begin + 1);if (end != -1) {mark_deal_pos = end + 1;//得到未处理的话题内容undeal_topic = text.substr(begin + 1, end - begin);len = undeal_topic.length();for (j = 0; j < len; j++) {if ('a' <= undeal_topic[j] && undeal_topic[j] <= 'z') {deal_topic[start++] = undeal_topic[j];is_space = true;}else if ('A' <= undeal_topic[j] && undeal_topic[j] <= 'Z') {deal_topic[start++] = undeal_topic[j] + 32;is_space = true;}else if ('0'<=undeal_topic[j] && undeal_topic[j]<='9') {deal_topic[start++] = undeal_topic[j];is_space = true;}else if (is_space) {deal_topic[start++] = ' ';is_space = false;}}//去除尾部空格if (start != 0 && deal_topic[start - 1] == ' ') {start--;}deal_topic[start] = '\0';string deal_(deal_topic);//判断是否是空话题if (deal_.length() > 0) {it = all_record.find(deal_);if (it != all_record.end()) {if (it->second.last != i) {it->second.times++;it->second.last = i;}}else {all_topic.insert(all_topic.begin()+insert_pos,deal_);insert_pos++;topic.last = i;topic.times = 1;all_record.insert({ deal_,topic });}}}}else {break;}}}//开始搜索int max = 0, equeal_hot_times = 0;string hot_topic;for (vector<string>::iterator mv = all_topic.begin(); mv != all_topic.end(); mv++) {it = all_record.find(*mv);if (it->second.times > max) {max = it->second.times;hot_topic.clear();hot_topic.append(*mv);equeal_hot_times = 0;}else if (it->second.times == max) {if (hot_topic.compare(*mv) > 0) {hot_topic.clear();hot_topic.append(*mv);}equeal_hot_times++;}}hot_topic[0] -= 32;cout << hot_topic << endl;cout << max;if (equeal_hot_times) {cout << endl << "And " << equeal_hot_times << " more ...";}return 0;
}
7-46 新浪微博热门话题 (30 分)相关推荐
- 5-46 新浪微博热门话题 (30分)
5-46 新浪微博热门话题 (30分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在 ...
- 数据结构PTA习题:进阶实验5-3.2 新浪微博热门话题 (30分)
进阶实验5-3.2 新浪微博热门话题 (30分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到 ...
- 7-46 新浪微博热门话题 (30分)--map
1 #include<iostream> 2 #include <map> 3 #include <string> 4 #include <cstring&g ...
- 7-46 新浪微博热门话题 (30 分)(思路+详解+set + map)pta逐个点过的 来呀兄弟们
一 :题目 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题 ...
- PAT结构与算法7-46 新浪微博热门话题 (50行精简 测试点分析)
7-46 新浪微博热门话题 (30 分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人 ...
- 数据结构PTA 进阶实验5-3.2 新浪微博热门话题
进阶实验5-3.2 新浪微博热门话题 题目 解法 题目 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可 ...
- 7-46 新浪微博热门话题(字符串)
题目链接:7-46 新浪微博热门话题 考查知识:字符串 题意描述: 给定n条微博,每条微博里有若干话题,试统计被最多条微博提到的话题. 思路简析: 首先对#号位置进行记录,然后用a.substr(开始 ...
- 7-46 新浪微博热门话题
➳ENTRY 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话 ...
- python爬取新浪微博热门话题保存到excel等文件
第一步 在网页上登录新浪微博,获取登录cookie 先把它复制好先,进行第二步 第二步 废话不多说,直接上代码,把刚刚复制好的值,赋给co变量 # -*- coding: utf-8 -*- &quo ...
- PTA新浪微博热门话题(题面毒瘤)
这道题的题目描述非常容易让人误解 测试点1容易过掉 一般没有问题 测试点2会出现k等于0的情况 这个时候最后一行是不输出的(题目没有写清楚) 测试点3容易出现PE 实际上是中间的处理过程存在问题 这里 ...
最新文章
- Oracle中如何使用imp语言导入dmp文件
- 蚂蚁金服亿级并发下的移动端到端网络接入架构解析
- 【java】创建一个窗口,统计输入内容
- 未来计算机技术的发展趋势有哪些,计算机技术的未来发展趋势,以及其应用范围...
- 创意水彩中国风重阳节PPT模板
- Android控件——TextView与EditText
- 西瓜书 第九章 聚类算法
- pytorch官网预训练模型百度云下载 VGG16,Densnet169,inception_v3
- 【计算机网络】6 路由器与静态路由配置
- 【图像加密】基于matlab GUI Logistic混沌图像加密与解密【含Matlab源码 1216期】
- matlab如何看机器人末端坐标,关于RobotStudio中机器人末端位置的MATLAB仿真验证
- c语言指针存储的第一个字节,c语言指针详解,学霸课堂记录
- poj 1583 Choose Your Words Carefully
- ffdshow 源代码分析 3: 位图覆盖滤镜(设置部分Settings)
- 将首地址为MEM的100个字的数组中所有为0的项删除 ;并将后续项向前压缩,最后将数组剩余部分补上0。方法2!!!
- 我的江湖也是你的江湖
- 对奥卡姆剃刀(Occam’s razor)原理的思考
- 什么是Android进程(app)保活、进程保活的方案
- Vue项目中---文本框中加入simditor编辑器
- 《风火之旅》“首部资料片”由你做主!
热门文章
- www.skymaya.com:8080/index.php,www_skymaya_com
- leetcode46题 php实现,Leetcode PHP题解--D46 893. Groups of Special-Equivalent Strings
- 计算系数(多项式展开+快速幂)
- Supermicro 1024US-TRT 服务器评测:1U 机箱中的 128 个内核
- c++小游戏——打飞机
- Word公式编辑大括号内公式对齐方法
- Springboot @Aspect
- facebook登陆授权 服务器接入记录
- 使用Fiddler监控雷电/夜神模拟器浏览网页:安全警告:该网站的安全证书有问题.解决方案!
- Linux 常用命令 Updating