給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 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 <= words.length <= 2000
1 <= words[i].length <= 7
每個單詞都是小寫字母 。
首先去掉重複的單詞,然後列舉每個單詞的字尾,若改字尾等於某個單詞,則再刪去該字尾等於的單詞(編碼時只需要將其作為更長單詞的字尾即可)。最後統計剩下的單詞長度+1之和即可。
時間複雜度
空間複雜度
int minimumlengthencoding(vector& words)
由於需要大量的判斷某個字串是否是某個給定字串的字首或字尾,因此可以想到使用字典樹。使用字典樹儲存所有單詞後統計葉節點對應字串長度+1之和即為結果。
時間複雜度。
空間複雜度
class trienode
trienode* get(char c)
return children[c - 'a'];
}};class solution
int ans = 0;
for(auto [node,word] : map)
if(node->count == 0)
ans += 1 + word.length();
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 527 單詞縮寫
給定乙個由n個不重複非空字串組成的陣列,你需要按照以下規則為每個單詞生成最小的縮寫。初始縮寫由起始字母 省略字母的數量 結尾字母組成。若存在衝突,亦即多於乙個單詞有同樣的縮寫,則使用更長的字首代替首字母,直到從單詞到縮寫的對映唯一。換而言之,最終的縮寫必須只能對映到乙個單詞。若縮寫並不比原單詞更短,...