Given a list of words, each word consists of English lowercase letters.
Let's say word1
is a predecessor of word2
if and only if we can add exactly one letter anywhere in word1
to make it equal to word2
. For example, "abc"
is a predecessor of "abac"
.
A word chain is a sequence of words [word_1, word_2, ..., word_k]
with k >= 1
, where word_1
is a predecessor of word_2
, word_2
is a predecessor of word_3
, and so on.
Return the longest possible length of a word chain with words chosen from the given list of words
.
Example 1:
Input: ["a","b","ba","bca","bda","bdca"] Output: 4 Explanation: one of the longest word chain is "a","ba","bda","bdca".
class Solution:
def longestStrChain(self, words: List[str]) -> int:
if not words:
return 1
words.sort(key=len)
cache = {}
res = 0
for word in words:
longest = 0
for i in range(len(word)):
child = word[0:i]+word[i+1:]
longest = max(longest,cache.get(child,0)+1)
cache[word] = longest
res = max(res,longest)
return res
TC:O(N log n) or O(N * max(len(word))) SC: O(N)