一、基本的字典樹實現
子節點的資料結構使用了陣列的形式,也可以用鍊錶。前者佔空間更大,後者耗時更多。
包含insert和find,兩個基礎的函式,用於在字典樹中插入和尋找乙個字串。
預設字串都由26個小寫字母組成(如果使用鍊錶結構則不需要宣告此點)。
class
trie
void
insert
(string s)
node-
>isletter=
true;}
bool
find
(string s)
return node-
>isletter;}}
;
二、題目:單詞的壓縮編碼(leetcode)
附leetcode**:
int sum;
class
trie
void
insert
(string s)
node=child[s[i]-97
];} node-
>isletter=
true;}
bool
find
(string s)
return
true;}
};class
solution
}return sum;}}
;
首先分析題意,主要處理的問題是乙個單詞為另乙個單詞的字尾。因為字典樹也叫字首樹,我們可以將單詞先逆序然後插入字典樹。
該題最簡單的解決方法就是待所有字串插入完畢後統計字典樹中葉子數。而本文考慮的方法是邊插入邊計算的解法。
考慮最簡單的邊插入邊計算:按順序插入逆序處理的字串,累加它們其長度,如果發現某個字串已存在於樹中則不加:
若測試用例為 [time,me](即某字串的字尾必然出現在它的後面),該演算法已經滿足。
若測試用例為 [me,time],則插入time字串時需要將之前加上的me的長度減去。
至此演算法基本成型。
實現的細節可以對比前面的字典樹實現來檢視具體改動了**。
單詞壓縮編碼 Trie樹
問題描述 給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 s 與乙個索引列表 a。例如,如果這個列表是 time me bell 我們就可以將其表示為 s time bell 和 indexes 0,2,5 對於每乙個索引,我們可以通過從字串 s 中索引的位置開始讀取字串,直到 結束,來恢復我們...
單詞的壓縮編碼
1 描述820 給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 s 與乙個索引列表 a。例如,如果這個列表是 time me bell 我們就可以將其表示為 s time bell 和 indexes 0,2,5 對於每乙個索引,我們可以通過從字串 s 中索引的位置開始讀取字串,直到 結束,來恢...
LeetCode字典樹 820單詞的壓縮編碼
給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 s 與乙個索引列表 a。例如,如果這個列表是 time me bell 我們就可以將其表示為 s time bell 和 indexes 0,2,5 對於每乙個索引,我們可以通過從字串 s 中索引的位置開始讀取字串,直到 結束,來恢復我們之前的單詞...