Longest String Chain
Given a list of words, each word consists of English lowercase letters.
Let's sayword1
is a predecessor ofword2
if and only if we can add exactly one letter anywhere inword1
to make it equal toword2
. For example, "abc"
is a predecessor of"abac"
.
A_word chain _is a sequence of words[word_1, word_2, ..., word_k]
withk >= 1
, whereword_1
is a predecessor ofword_2
,word_2
is a predecessor ofword_3
, and so on.
Return the longest possible length of a word chain with words chosen from the given list ofwords
.
Example 1:
Input:
["a","b","ba","bca","bda","bdca"]
Output:
4
Explanation
: one of
the longest word chain is "a","ba","bda","bdca".
Note:
1 <= words.length <= 1000
1 <= words[i].length <= 16
words[i] only consists of English lowercase letters.
分析
本题顺序可以重组,所以sort,注意可以直接sort(key=len)
每个词只有一个子,所以只要找到子+1就好,dp是dict: word->count
class Solution:
def longestStrChain(self, words: List[str]) -> int:
n = len(words)
dp = {w:1 for w in words}
words.sort(key= len)
res = 1
for w in words:
for i in range(len(w)):
nw = w[:i] + w[i+1:]
if nw in words:
dp[w] =dp[nw]+1
return max(dp[w] for w in words)
Last updated
Was this helpful?