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

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

输入格式:
输入说明:输入首先给出一个正整数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 分)相关推荐

  1. 5-46 新浪微博热门话题 (30分)

    5-46 新浪微博热门话题 (30分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在 ...

  2. 数据结构PTA习题:进阶实验5-3.2 新浪微博热门话题 (30分)

    进阶实验5-3.2 新浪微博热门话题 (30分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到 ...

  3. 7-46 新浪微博热门话题 (30分)--map

    1 #include<iostream> 2 #include <map> 3 #include <string> 4 #include <cstring&g ...

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

    一 :题目 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题 ...

  5. PAT结构与算法7-46 新浪微博热门话题 (50行精简 测试点分析)

    7-46 新浪微博热门话题 (30 分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人 ...

  6. 数据结构PTA 进阶实验5-3.2 新浪微博热门话题

    进阶实验5-3.2 新浪微博热门话题 题目 解法 题目 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可 ...

  7. 7-46 新浪微博热门话题(字符串)

    题目链接:7-46 新浪微博热门话题 考查知识:字符串 题意描述: 给定n条微博,每条微博里有若干话题,试统计被最多条微博提到的话题. 思路简析: 首先对#号位置进行记录,然后用a.substr(开始 ...

  8. 7-46 新浪微博热门话题

    ➳ENTRY 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话 ...

  9. python爬取新浪微博热门话题保存到excel等文件

    第一步 在网页上登录新浪微博,获取登录cookie 先把它复制好先,进行第二步 第二步 废话不多说,直接上代码,把刚刚复制好的值,赋给co变量 # -*- coding: utf-8 -*- &quo ...

  10. PTA新浪微博热门话题(题面毒瘤)

    这道题的题目描述非常容易让人误解 测试点1容易过掉 一般没有问题 测试点2会出现k等于0的情况 这个时候最后一行是不输出的(题目没有写清楚) 测试点3容易出现PE 实际上是中间的处理过程存在问题 这里 ...

最新文章

  1. Oracle中如何使用imp语言导入dmp文件
  2. 蚂蚁金服亿级并发下的移动端到端网络接入架构解析
  3. 【java】创建一个窗口,统计输入内容
  4. 未来计算机技术的发展趋势有哪些,计算机技术的未来发展趋势,以及其应用范围...
  5. 创意水彩中国风重阳节PPT模板
  6. Android控件——TextView与EditText
  7. 西瓜书 第九章 聚类算法
  8. pytorch官网预训练模型百度云下载 VGG16,Densnet169,inception_v3
  9. 【计算机网络】6 路由器与静态路由配置
  10. 【图像加密】基于matlab GUI Logistic混沌图像加密与解密【含Matlab源码 1216期】
  11. matlab如何看机器人末端坐标,关于RobotStudio中机器人末端位置的MATLAB仿真验证
  12. c语言指针存储的第一个字节,c语言指针详解,学霸课堂记录
  13. poj 1583 Choose Your Words Carefully
  14. ffdshow 源代码分析 3: 位图覆盖滤镜(设置部分Settings)
  15. 将首地址为MEM的100个字的数组中所有为0的项删除 ;并将后续项向前压缩,最后将数组剩余部分补上0。方法2!!!
  16. 我的江湖也是你的江湖
  17. 对奥卡姆剃刀(Occam’s razor)原理的思考
  18. 什么是Android进程(app)保活、进程保活的方案
  19. Vue项目中---文本框中加入simditor编辑器
  20. 《风火之旅》“首部资料片”由你做主!

热门文章

  1. www.skymaya.com:8080/index.php,www_skymaya_com
  2. leetcode46题 php实现,Leetcode PHP题解--D46 893. Groups of Special-Equivalent Strings
  3. 计算系数(多项式展开+快速幂)
  4. Supermicro 1024US-TRT 服务器评测:1U 机箱中的 128 个内核
  5. c++小游戏——打飞机
  6. Word公式编辑大括号内公式对齐方法
  7. Springboot @Aspect
  8. facebook登陆授权 服务器接入记录
  9. 使用Fiddler监控雷电/夜神模拟器浏览网页:安全警告:该网站的安全证书有问题.解决方案!
  10. Linux 常用命令 Updating