leetcode 820 單詞的壓縮碼 筆記

2021-10-04 12:39:47 字數 1165 閱讀 4387

題目鏈結

給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 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

] 。

題解方法用的是講解裡的字典法。

字典法本身比較好理解,將每個單詞倒著把字母一次存入樹中。

但在看完**最後的for迴圈時懵了——

for

(auto

&[node, idx]

: nodes)

}

這迴圈咋個用的,雜湊表存的不是字母結尾或者開頭嗎??

看了會兒才想明白,它的雜湊表nodes裡存的鍵值對,鍵是每個單詞開頭字母節點的指標,且第一次建立該節點時對應的count=0。而值並不是字母表,而是每個單詞在vector裡的位置

上圖中的粉色節點才是存在雜湊表nodes裡的東西

到這裡才是真的搞清楚了做法,但感覺自己去想依舊很難想象,還是得多做題。

**如下:

class

trienode

trienode*

get(

char c)

return children[c -

'a'];}

};class

solution

int ans =0;

for(

auto iter : nodes)

}return ans;}}

;

Leetcode 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 中索引的位置開始讀取字串,直到 結束,來恢復我們之前的單詞...

LeetCode 820 單詞的壓縮編碼

給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 s 與乙個索引列表 a。例如,如果這個列表是 time me bell 我們就可以將其表示為 s time bell 和 indexes 0,2,5 對於每乙個索引,我們可以通過從字串 s 中索引的位置開始讀取字串,直到 結束,來恢復我們之前的單詞...