字典樹 leetcode 527 單詞縮寫

2021-10-23 18:23:56 字數 1442 閱讀 3673

給定乙個由n個不重複非空字串組成的陣列,你需要按照以下規則為每個單詞生成最小的縮寫。

初始縮寫由起始字母+省略字母的數量+結尾字母組成。

若存在衝突,亦即多於乙個單詞有同樣的縮寫,則使用更長的字首代替首字母,直到從單詞到縮寫的對映唯一。換而言之,最終的縮寫必須只能對映到乙個單詞。

若縮寫並不比原單詞更短,則保留原樣。

例項: 

輸入:[

"like"

,"god"

,"internal"

,"me"

,"internet"

,"interval"

,"intension"

,"face"

,"intrusion"

]輸出:

["l2e"

,"god"

,"internal"

,"me"

,"i6t"

,"interval"

,"inte4n"

,"f2e"

,"intr4n"

]

注意:

n和每個單詞的長度均不超過 400。

每個單詞的長度大於 1。

單詞只由英文小寫字母組成。

返回的答案需要和原陣列保持同一順序。

看到題目第一眼就感覺是要用字典樹了,但是奈何我忘了,只記得大概的思想,然後補習了一遍,參考了題解的一些做法做出來了= =

大概思路:

先把每個單詞根據它們的縮寫進行分組,同時再用乙個map記錄每個單詞在原單詞表中的位置

對分好組的單詞插入字典樹

通過字典樹的字首,判斷單詞的縮寫形式(詳情見下面**)

// 字典樹類

class

trie

;//字典樹的26個字數,代表26的字母'a'-'z'

int cnt =0;

//擁有該字首的單詞數量

void

insert

(string& s)}}

;class

solution

unordered_map>

::iterator it;

//迭代器

for(it=group.

begin()

; it!=group.

end(

); it++

)

tmp +

= strs[i]

[j];

//單詞字首增加

q = q-

>next[strs[i]

[j]-

'a'];}

ans[pos[strs[i]]]

= tmp;

//根據pos中每個單詞的原始位置,存放單詞的縮寫形式}}

return ans;}}

;

Leetcode 單雙字典樹

有n個只包含小寫字母的串s1 s2 sn 每次給你乙個只包含小寫字母的串t。如果串s存在字首s 它的奇數字的字元與t的奇數字字元完全相同,稱s為t的單匹配串,如果串s的偶數字字元與t的偶數字的字元全都相同,稱s為t的雙匹配串。現在給你m個字串,對於每個字串t,求s1 s2 sn 中有多少個串是t的單...

字典樹leetcode習題

給出乙個字串陣列words組成的一本英語詞典。從中找出最長的乙個單詞,該單詞是由words詞典中其他單詞逐步新增乙個字母組成。若其中有多個可行的答案,則返回答案中字典序最小的單詞。若無答案,則返回空字串。例項 輸入 words w wo wor worl world 輸出 world 解釋 單詞 w...

LeetCode字典樹 820單詞的壓縮編碼

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