2018-10-26 00:32:05

问题描述:

问题求解:

方法一、Trie

最长出现的字符串,最容易想到的解法就是Trie树了,于是首先使用Trie树进行了实现,代码量有点大,当然了是可以A掉的,只是对于这种Easy的题,理论上是不该超过50行代码的。

public class MostCommonWord {class TrieNode {public TrieNode[] next = new TrieNode[26];public int cnt = 0;public String word = null;}public String mostCommonWord(String paragraph, String[] banned) {int[] maxCnt = new int[1];String[] res = new String[1];TrieNode root = buildTrie(paragraph, banned);helper(root, maxCnt, res);return res[0];}private void helper(TrieNode root, int[] maxCnt, String[] res) {if (root.cnt > maxCnt[0]) {maxCnt[0] = root.cnt;res[0] = root.word;}for (int i = 0; i < 26; i++) {if (root.next[i] != null) helper(root.next[i], maxCnt, res);}}private TrieNode buildTrie(String s, String[] banned) {Set<Character> set = new HashSet<>();Set<String> b = new HashSet<>();for (String i : banned) b.add(i);set.add(' ');set.add('!');set.add('?');set.add('\'');set.add(',');set.add(';');set.add('.');TrieNode root = new TrieNode();String lowS = s.toLowerCase() + ' ';char[] chs= lowS.toCharArray();for (int i = 0; i < chs.length; i++) {while (i < chs.length && set.contains(chs[i])) i++;TrieNode cur = root;for (int j = i; j < chs.length; j++) {if (set.contains(chs[j])) {cur.word = lowS.substring(i, j);if (!b.contains(cur.word)) cur.cnt++;i = j;break;}if (cur.next[chs[j] - 'a'] == null) cur.next[chs[j] - 'a'] = new TrieNode();cur = cur.next[chs[j] - 'a'];}}return root;}public static void main(String[] args) {System.out.println('\'');}
}

方法二、split

作为一条Easy必然是有简单解,但是还是有点tricky的,这里使用了正则的replaceAll函数来将其他字符转成” “,之后再split并统计即可。

    public String mostCommonWord(String paragraph, String[] banned) {String[] strs = paragraph.replaceAll("[!?',;.]", " ").toLowerCase().split(" ");Map<String, Integer> map = new HashMap<>();Set<String> set = new HashSet<>();for (String i : banned) set.add(i);set.add("");for (String s : strs) {if (!set.contains(s)) {int cnt = map.getOrDefault(s, 0);map.put(s, ++cnt);}}int maxCnt = 0;String res = "";for (String s : map.keySet()) {if (map.get(s) > maxCnt) {maxCnt = map.get(s);res = s;}}return res;}

转载于:https://www.cnblogs.com/TIMHY/p/9853778.html

最常出现的字符串 Most Common Word相关推荐

  1. Python字符串操作之常忘的字符串、列表、数值

    字符串操作 s为字符串 s.isalnum() 所有字符都是数字或者字母 s.isalpha() 所有字符都是字母 s.isdigit() 所有字符都是数字 s.islower() 所有字符都是小写 ...

  2. LeetCode 819. Most Common Word

    原题链接在这里:https://leetcode.com/problems/most-common-word/description/ 题目: Given a paragraph and a list ...

  3. C#LeetCode刷题之#819-最常见的单词(Most Common Word)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3969 访问. 给定一个段落 (paragraph) 和一个禁用单 ...

  4. 算法题库 java实现_LeetCode算法题-Most Common Word(Java实现)

    这是悦乐书的第321次更新,第342篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第190题(顺位题号是819).给定一个段落和一组禁止词,返回不在禁止词列表中的最常用词 ...

  5. 前端将后端返回的富文本格式字符串转换成word下载

    需要用到三个库 npm install html-docx-js -S npm install file-saver -S npm install dayjs -S 或 pnpm install ht ...

  6. 【LeetCode】字符串 string(共112题)

    [3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring ( ...

  7. 微软文本检索_如何在Microsoft Word中引用其他文档中的文本

    微软文本检索 You probably have some text that you type often in your Word documents, such as addresses. In ...

  8. C#LeetCode刷题-字符串

    字符串篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串 24.6% 中等 5 最长回文子串 22.4% 中等 6 Z字形变换 35.8% 中等 8 字符串转整数 (atoi) 15.3% 中 ...

  9. freemarker 导出word(表格,多列表,多图片)(原创)

    一.jar包支持 1.freemarker freemarker-2.3.28.jar 2.poi poi-3.9.jar poi-examples-3.9.jar poi-excelant-3.9. ...

最新文章

  1. JSONObject 和 JSONArray 获取value 的方法
  2. Nature Method:HUMAnN2实现宏基因组和宏转录组种水平功能组成分析
  3. centos 6.5内核升级
  4. asp 与 database (3)
  5. JavaSE——链表集合
  6. 大数据是风口,但是该怎么规划架构?一般人都没注意到
  7. 【组件化开发】前端进阶篇之如何编写可维护可升级的代码
  8. golang type 说明和使用
  9. 设计模式之--单例模式
  10. clob字段怎么导出_人人都会遇到的问题:Java 如何优雅的导出 Excel~
  11. 300+篇CVPR 2020代码开源的论文(转载)
  12. 咸鱼笔记:《实用软件工程》第一、二章课后简答题及参考答案
  13. screen投屏怎么用_Screen投屏
  14. matlab三角区域积分,关于复杂三角函数的二重积分,matlab该怎么求啊
  15. qt制作简易的视频通话
  16. PD快充DRP-TypeC连接状态机详解
  17. linux系统中如何查ip,在Linux系统中查看ip的命令是什么
  18. 抖音同款雪花飘落圣诞树
  19. 微信小程序大全之100荐(701~800)
  20. 「ASO优化服务」APP如何做数据分析

热门文章

  1. Linux 系统的硬链接和软链接详解
  2. Linux 命令之 ulimit 命令-控制shell程序的资源
  3. Requests库基本使用
  4. android获取应用安装通知消息,如何在Android 11 上获取已安装应用列表
  5. markdown如何设置图片大小_Gitee(码云)实现免费 Markdown 图床
  6. 计算机usb端口没反应,技术编辑教您电脑usb接口没反应怎么办
  7. mac mysql 重设密码_Mac下忘记mysql密码重新设置密码的图文教程
  8. C语言 | 变量的存储方式
  9. 最常用计算机机箱,电脑机箱的常用材质是什么?
  10. java linkedlist实例_Java Linkedlist原理及实例详解