Longest String Chain less than 1 minute read 1048. Longest String Chain Solution: bottom-up dynamic programming class Solution: def longestStrChain(self, words: List[str]) -> int: def is_predecessor(s, l): # Returns True is s is a predecessor of l if len(l) - len(s) != 1: return False i, j = 0, 0 while i < len(s) and j < len(l): if s[i] == l[j]: i += 1 j += 1 else: j += 1 return s[i:] == l[j:] return j == len(l) - 1 dp = {w: 1 for w in words} lengths = collections.defaultdict(list) lengths[0] = [] for w in words: lengths[len(w)].append(w) ls = sorted(lengths.keys()) for l in ls: for w in lengths[l]: for w2 in lengths[l-1]: if is_predecessor(w2, w): dp[w] = max(dp[w], dp[w2]+1) return max(dp[i] for i in dp) Twitter Facebook LinkedIn Previous Next Comments
Comments