題目:
給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 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再加上後乙個單詞的長度。
如果但看示例,這樣的想法是沒有任何問題的,但關鍵是如果長度短的在前,長的在後,便會出錯。
所以在查閱過後,我學到了字典樹這種資料結構。
即乙個節點內包括乙個長度為26的節點陣列。
每個節點在陣列中的位置代表a,b,c…
而本題,考慮的是字尾,所以我們將每乙個單詞從尾到頭加入字典樹。
這樣總長度即是所有葉子結點到根節點的長度之和。
注意:單詞加入字典樹的順序為從長到短。
**:
class
solution})
;int res =0;
treenode root =
newtreenode(0
);for(string s:words)
res += root.
insert
(s);
return res;}}
class
treenode
public
intinsert
(string word)
t = t.child[word.
charat
(i)-
'a'];}
return isnew?word.
length()
+1:0
;}}
字典樹 單詞的壓縮編碼
一 基本的字典樹實現 子節點的資料結構使用了陣列的形式,也可以用鍊錶。前者佔空間更大,後者耗時更多。包含insert和find,兩個基礎的函式,用於在字典樹中插入和尋找乙個字串。預設字串都由26個小寫字母組成 如果使用鍊錶結構則不需要宣告此點 class trie void insert strin...
LeetCode 單詞的壓縮編碼(字首樹)
給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 s 與乙個索引列表 a。例如,如果這個列表是 time me bell 我們就可以將其表示為 s time bell 和 indexes 0,2,5 對於每乙個索引,我們可以通過從字串 s 中索引的位置開始讀取字串,直到 結束,來恢復我們之前的單詞...
單詞壓縮編碼 Trie樹
問題描述 給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 s 與乙個索引列表 a。例如,如果這個列表是 time me bell 我們就可以將其表示為 s time bell 和 indexes 0,2,5 對於每乙個索引,我們可以通過從字串 s 中索引的位置開始讀取字串,直到 結束,來恢復我們...