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

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

输入格式:

输入说明:输入首先给出一个正整数N(≤105),随后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 <bits/stdc++.h>
using namespace std;string process(string str){// 删除首尾空格str.erase(str.find_last_not_of(' ') + 1);str.erase(0, str.find_first_not_of(' '));// 删除中间多余空格string s;for(int i = 0; i < str.size(); i++){if(str[i] == ' ' && str[i+1] == ' ') continue;s += str[i];}return s;
}main() {int n, Max = 0, others = 0;string weibo, topic;map<string, int> cnt;cin >> n;// getchar(); 因为后面会对非字母或数字处理 所以是否吃掉换行影响不大while(getline(cin, weibo)){int i = 0;// 重置话题标记map<string, bool> existed;while(i < weibo.size()){// 找到第一个'#' 从'#'后开始处理while(i < weibo.size() && weibo[i] != '#') i++;i++;// 直到指向下一个'#'为止 将字母字符转换成小写并连接起来 否则当成空格处理while(i < weibo.size() && weibo[i] != '#'){topic += (isalnum(weibo[i])) ? tolower(weibo[i]) : ' ';i++;}// 指向下一个字符 防止下一次循环时误判为第一个'#'i++;// 处理话题空格topic = process(topic);// 字符串非空 && 话题首次出现if(existed[topic] == false && topic.size() != NULL){existed[topic] = true;cnt[topic]++;}// 重置字符串topic.clear();}}for(auto it: cnt){Max = max(it.second, Max);}for(auto it: cnt){// 出现次数最多即热门话题if(Max == it.second){// 字母序输出第一个 统计总热门话题个数if(++others == 1){string hot = it.first;// 首字母大写hot[0] = toupper(hot[0]);cout << hot << endl << Max << endl;}}}// 另外几条热门话题的条数if(--others) cout << "And " << others << " more ...";
}

"找出被最多条微博提到的话题"根据这条件,我们统计的关于某个话题的微博数,而不是话题的出现次数。即便一条微博里面同样话题出现了N次,但由于在同一个微博里面,所以数量只加一。

处理字符串函数,删除末尾空格可以这样理解。find_last_not_of(" ") + 1先找到末尾空格的位置,然后用erase()函数将这个位置设为'\0',这不仅消去此处的空格,同时将后面多余的空格也一并删去,如下测试。

参考代码1        参考代码2        参考代码3         参考文章

PTA 7-46 新浪微博热门话题 (30 point(s))相关推荐

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

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

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

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

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

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

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

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

  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. PTA新浪微博热门话题(题面毒瘤)

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

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

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

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

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

最新文章

  1. 我在不炎熱也不抑鬱的秋天,依然不抽煙
  2. 20160221.CCPP体系详解(0031天)
  3. 华为IoT平台NB编解码插件开发详细教程【下篇】
  4. 工业机器人 答案 韩建海_不可或缺:协作机器人对于制造业转型升级的意义
  5. 实体零售全渠道及数字化发展报告(2020)
  6. android问题:Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
  7. 实体映射最强工具类:MapStruct 真香!
  8. 【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 人物数据内存结构 | 人物三维坐标数据分析 )
  9. 怎么修改teredo服务器,技术员设置win7系统通过teredo连接IPv6的修复方案
  10. JVM垃圾收集器-Parallel Scavenge收集器
  11. (C语言)图书管理系统(程序设计)
  12. 经典兔子问题有一对兔子从出生后第3个月起每个月都生一对兔子
  13. 粒子群优化算法实现寻找函数最值
  14. 2020豆瓣电影首页热门电影+热门电视剧 API
  15. Java 性能调优的技巧有哪些?
  16. 移动端布局-px转vw、vh
  17. git版本回退简单记录
  18. Matlab 从怀俄明大学上爬取探空数据
  19. RTX 4090来了!显卡换新,驱动别拉胯
  20. NSN sprint904 总结回顾

热门文章

  1. Qt制作的一款即时通讯软件
  2. linux 函数式编程,理解函数式编程_Linux编程_Linux公社-Linux系统门户网站
  3. JAVA线程中的sleep()、wait()、yield()、join()作用
  4. matlab升压斩波电路,升压斩波电路课程设计汇总
  5. 高级程序员和普通程序员有哪些区别?
  6. 经典育儿书籍推荐目录
  7. 正常邮件被误判为垃圾邮件
  8. FaceBook第三方登录获取姓名,头像,邮箱等个人信息
  9. 第6节 远程管理路由器及交换机—基于Cisco Packet Tracer
  10. Ruby / Rails代码气味基础01