日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Leedcode][JAVA][第820题][字典树][Set]

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [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

class Solution {public int minimumLengthEncoding(String[] words) {Set<String> set = new HashSet<>(Arrays.asList(words));for (String word : words) {for (int i = 1; i < word.length(); i++) {set.remove(word.substring(i));}}int ans = 0; //+1 按照題意#for (String word : set) {ans += word.length() + 1;}return ans;} }
2. 字典樹/Trie樹/前綴樹 O(N^2)

  • 把單詞的倒序插入字典樹(后綴)長度越長優先插入
  • 字典樹判斷某個單詞的逆序是否出現在字典樹里
class Solution {public int minimumLengthEncoding(String[] words) {int len = 0;Trie trie = new Trie();// 先對單詞列表根據單詞長度由長到短排序Arrays.sort(words, (s1, s2) -> s2.length() - s1.length());// 單詞插入trie,返回該單詞增加的編碼長度for (String word: words) {len += trie.insert(word);}return len;} }// 定義tire class Trie {TrieNode root;public Trie() {root = new TrieNode();}public int insert(String word) {TrieNode cur = root;boolean isNew = false;// 倒著插入單詞for (int i = word.length() - 1; i >= 0; i--) {int c = word.charAt(i) - 'a';if (cur.children[c] == null) {isNew = true; // 是新單詞cur.children[c] = new TrieNode();}cur = cur.children[c];}// 如果是新單詞的話編碼長度增加新單詞的長度+1,否則不變。return isNew? word.length() + 1: 0;} }class TrieNode {char val;TrieNode[] children = new TrieNode[26];public TrieNode() {} }作者:sweetiee 鏈接:https://leetcode-cn.com/problems/short-encoding-of-words/solution/99-java-trie-tu-xie-gong-lue-bao-jiao-bao-hui-by-s/

【總結】

  • length 屬性 length()方法
    -java中數組是沒有length()方法的,只有length屬性,數組array.length返回的是該數組的長度。
  • -字符串String是有length()方法的,str.length()返回的是該字符串的長度。

    2.字典樹出現地方

    • 搜索引擎 聯想字段
    • 區塊鏈 以太坊 Merkle Patricia Tree 默克爾樹+前綴樹
    • 英語分詞

    總結

    以上是生活随笔為你收集整理的[Leedcode][JAVA][第820题][字典树][Set]的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。