前往
大廳
主題

LeetCode - 1048. Longest String Chain 解題心得

Not In My Back Yard | 2021-06-21 00:00:01 | 巴幣 0 | 人氣 391

題目連結:


題目意譯:
給定一個字詞列表 words,每個字詞由小寫英文字母組成。

讓我們稱呼 word1 為 word2 的一個前導者(Predecessor)若且唯若我們可以在 word1 中任一地方安插一字元使得它變為 word2。例如 "abc" 為 'abac' 的前導者。

一個字詞鏈為一個字詞序列 [word_1, word_2, ..., word_k] 其中 k ≧ 1,且 word_1 為 word_2 的前導者、 word_2 為 word_3 的前導者,以此類推。

回傳從字詞列表 words 中選出的字詞所能形成的最長可能之字詞鏈長度。

限制:
1 ≦ words.length ≦ 1000
1 ≦ words[i].length ≦ 16
words[i] 只由小寫英文字母組成。



範例測資:
範例 1:
輸入: words = ["a","b","ba","bca","bda","bdca"]
輸出: 4
解釋: 其中一個最長的字詞鏈為 "a" 、 "ba" 、 "bda" 、 "bdca"。

範例 2:
輸入: words = ["xbc","pcxbcf","xb","cxbc","pcxbc"]
輸出: 5


解題思維:
將 words 中的字詞依照字串長度由短排到長。並利用一個雜湊表(Hash Table)H 儲存某個字串可以得出的最長鏈之長度。而一開始令空字串 "" 對應著鏈長度 0 (H[""] = 0)。

然後從短的字串開始掃到長度長的字串。對於每個字串 W,掃過其中所有字元並刪除看看,得到子字串 W'。之後看這些 W' 中哪些可形成的鏈結長度最長(H[W']),將該值加 1 即可得 H[W]。

如果所有 W' 都不存在於 H 中,則 W 自己可以形成一個長度為 1 的鏈,因此 H[W] = 1 。

而所求即所有 H[W] 中之最大值。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作