Cool说丨819

简介: 819. 最常见的单词

819. 最常见的单词

给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。

禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。


示例:

输入:

paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."

banned = ["hit"]

输出: "ball"

解释:

"hit" 出现了3次,但它是一个禁用的单词。

"ball" 出现了2次 (同时没有其他单词出现2次),所以它是段落里出现次数最多的,且不在禁用列表中的单词。

注意,所有这些单词在段落里不区分大小写,标点符号需要忽略(即使是紧挨着单词也忽略, 比如 "ball,"),

"hit"不是最终的答案,虽然它出现次数更多,但它在禁用单词列表中。


说明:

  • 1 <= 段落长度 <= 1000.
  • 1 <= 禁用单词个数 <= 100.
  • 1 <= 禁用单词长度 <= 10.
  • 答案是唯一的, 且都是小写字母 (即使在 paragraph 里是大写的,即使是一些特定的名词,答案都是小写的。)
  • paragraph 只包含字母、空格和下列标点符号!?',;.
  • 不存在没有连字符或者带有连字符的单词。
  • 单词里只包含字母,不会出现省略号或者其他标点符号。

第一版,有的没考虑到

输入:"a, a, a, a, b,b,b,c, c" ["a"]

输出:"bbbc"

预期:"b"

stringmostCommonWord(stringparagraph, vector<string>&banned) {

   stringword;

   intlen=paragraph.size(),max=1;

   unordered_map<string, int>res;

   for (inti=0; i<len; ++i) {

       if (paragraph[i] >='A'&&paragraph[i] <='Z') word+=paragraph[i] +'a'-'A';

       elseif (paragraph[i] >='a'&&paragraph[i] <='z') word+=paragraph[i];

       elseif (paragraph[i] ==' ') {//空格

           if (find(banned.begin(), banned.end(), word) ==banned.end()) {

               res[word] +=1;

           }

           word="";

       }

   }

   for (auto&a : res) {

       if (max<=a.second) {

           max=a.second;

           word=a.first;

       }

   }

   returnword;

   }

第二版,其实不难,也可以再优化一点

执行用时 :8 ms, 在所有 cpp 提交中击败了78.04%的用户

内存消耗 :8.6 MB, 在所有 cpp 提交中击败了97.33%的用户

   stringmostCommonWord(stringparagraph, vector<string>&banned) {

   stringword;

   intlen=paragraph.size(),max=1;

   unordered_map<string, int>res;

   for (auto&p:paragraph) {

       if (p>='A'&&p<='Z') word+=p+'a'-'A';

       elseif (p>='a'&&p<='z') word+=p;

       elseif(word!="") // && paragraph[i]==' '|| paragraph[i] == '!' || paragraph[i] == '?' || paragraph[i] ==  '\''|| paragraph[i] == ',' || paragraph[i] == ':' || paragraph[i] == '.'

       {

           if (find(banned.begin(), banned.end(), word) ==banned.end()) {

               res[word] +=1;

           }

           word="";

       }

   

   }

   for (auto&a : res) {

       //cout << a.first << " " << a.second << endl;

       if (max<=a.second) {

           max=a.second;

           word=a.first;

       }

   }

   returnword;

   }

第三版,这个反而更快,有点不可思议。。。

执行用时 :4 ms, 在所有 cpp 提交中击败了98.99%的用户

内存消耗 :8.6 MB, 在所有 cpp 提交中击败了100.00%的用户

   stringmostCommonWord(stringparagraph, vector<string>&banned) {

   stringword;

   intlen=paragraph.size(),max=1;

   unordered_map<string, int>res;

   for (autop:paragraph) {

       if (p>='A'&&p<='Z') word+=p+'a'-'A';

       elseif (p>='a'&&p<='z') word+=p;

       elseif(word!="")

       {

           if (find(banned.begin(), banned.end(), word) ==banned.end()) {

               res[word] +=1;

           }

           word="";

       }

   

   }

   for (autoa : res) {

       if (max<=a.second) {

           max=a.second;

           word=a.first;

       }

   }

   returnword;

   }


目录
相关文章
|
算法 Shell
通信系统中ZF,ML,MRC以及MMSE四种信号检测算法误码率matlab对比仿真
通信系统中ZF,ML,MRC以及MMSE四种信号检测算法误码率matlab对比仿真
|
存储 Prometheus Cloud Native
Grafana 系列文章(十):为什么应该使用 Loki
Grafana 系列文章(十):为什么应该使用 Loki
|
网络协议 网络性能优化 API
dpdk课程学习之练习笔记三(tcp的简单实现)
dpdk课程学习之练习笔记三(tcp的简单实现)
328 0
|
PyTorch 算法框架/工具
pytorch中torch.clamp()使用方法
pytorch中torch.clamp()使用方法
1102 0
pytorch中torch.clamp()使用方法
|
Ubuntu
树莓派 —— 关闭安装软件包时ubuntu对内核版本等的检查
树莓派 —— 关闭安装软件包时ubuntu对内核版本等的检查
|
存储 算法 Shell
哈希表、哈希桶(C++实现)【STL】
哈希表、哈希桶(C++实现)【STL】
399 0
|
消息中间件 中间件 程序员
分布式事务大揭秘:使用MQ实现最终一致性
本文由小米分享,介绍分布式事务中的MQ最终一致性实现,以RocketMQ为例。RocketMQ的事务消息机制包括准备消息、本地事务执行、确认/回滚消息及事务状态检查四个步骤。这种机制通过消息队列协调多系统操作,确保数据最终一致。MQ最终一致性具有系统解耦、提高可用性和灵活事务管理等优点,广泛应用于分布式系统中。文章还讨论了RocketMQ的事务消息处理流程和失败情况下的处理策略,帮助读者理解如何在实际应用中解决分布式事务问题。
1395 6
|
数据可视化 SDN Python
广义曼德勃罗特集的探索与交互式可视化
这篇文章介绍了如何使用Python和matplotlib库创建广义曼德勃罗特集的交互式可视化。作者探讨了曼德勃罗特集的基本概念,包括其自相似性和复杂边界,并扩展到广义集合,其中幂运算指数可以是任意复数。通过提供的Python代码示例,读者可以学习如何绘制并实现鼠标驱动的放大缩小功能,从而深入探索这个数学结构的细节。文章鼓励读者修改指数以观察不同形态,并提供了相关参考资料链接。
|
调度 数据安全/隐私保护
用户态和内核态 中断处理机制
用户态和内核态 中断处理机制
773 0
|
应用服务中间件 Linux nginx
linux离线安装Nginx
linux离线安装Nginx
798 1