[Leedcode][JAVA][第820题][字典树][Set]
生活随笔
收集整理的这篇文章主要介绍了
[Leedcode][JAVA][第820题][字典树][Set]
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
【问题描述】
给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 ["time", "me", "bell"],我们就可以将其表示为 S = "time#bell#" 和 indexes = [0, 2, 5]。对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 "#" 结束,来恢复我们之前的单词列表。那么成功对给定单词列表进行编码的最小字符串长度是多少呢?示例:输入: words = ["time", "me", "bell"] 输出: 10 说明: S = "time#bell#" , indexes = [0, 2, 5] 。提示:1 <= words.length <= 2000 1 <= words[i].length <= 7 每个单词都是小写字母 。【解答思路】
1. 数组加入set中,切割set中每个单词后缀,剔除相同的后缀 (如切割time 剔除me)
- word.substring(n) -> 从第n个下标开始切割(n<word.length())
例子 - time.substring(1) -> ime
- time.substring(2) -> me
- time.substring(3) -> e
2. 字典树/Trie树/前缀树 O(N^2)
- 把单词的倒序插入字典树(后缀)长度越长优先插入
- 字典树判断某个单词的逆序是否出现在字典树里
【总结】
-java中数组是没有length()方法的,只有length属性,数组array.length返回的是该数组的长度。
-字符串String是有length()方法的,str.length()返回的是该字符串的长度。
2.字典树出现地方
- 搜索引擎 联想字段
- 区块链 以太坊 Merkle Patricia Tree 默克尔树+前缀树
- 英语分词
总结
以上是生活随笔为你收集整理的[Leedcode][JAVA][第820题][字典树][Set]的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 邮件收发用什么软件
- 下一篇: APNIC IP 库