單詞的壓縮編碼(中等)字典樹 字首樹 Trie數

2021-10-04 13:13:13 字數 1108 閱讀 1635

題目:

給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 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 中索引的位置開始讀取字串,直到 結束,來恢復我們...