leetcode1048

 1 class Solution:
 2     def __init__(self):
 3         self.dic = {}
 4         self.visited = {}
 5         self.dp = []
 6 
 7     def backtrack(self,key,subkey):
 8         if subkey in self.dic.keys():
 9             indx = self.dic[key]
10             sindx = self.dic[subkey]
11             self.dp[indx] = max(self.dp[indx],self.dp[sindx]+1)
12             for j in range(len(subkey)):
13                 s2key = subkey[:j] + subkey[j+1:]
14                 if s2key in self.visited.keys() and self.visited[s2key] == 0:
15                     self.backtrack(subkey,s2key)
16 
17 
18     def longestStrChain(self, words: 'List[str]') -> int:
19         n = len(words)
20         self.dp.extend([1]*n)
21         words = sorted(words,key=lambda x:len(x))
22         for i in range(n):
23             ary = sorted(words[i])
24             word = ''.join(ary)
25             self.dic[word] = i
26         for key in self.dic.keys():
27             self.visited[key] = 0
28 
29         for key in self.dic.keys():
30             for j in range(len(key)):
31                 subkey = key[:j] + key[j+1:]
32                 self.backtrack(key,subkey)
33             self.visited[key] = 1
34 
35         return max(self.dp)

这个版本还不太完善,稍后再把代码简化一下吧。

おすすめ

転載: www.cnblogs.com/asenyang/p/10928401.html