[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 库