1048. Longest String Chain
Medium
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".
Note:
1 <= words.length <= 10001 <= words[i].length <= 16words[i]only consists of English lowercase letters.
class Solution { public int longestStrChain(String[] words) { int ret = 0; Arrays.sort(words, Comparator.comparingInt(String::length)); Map<String, Integer> dp = new HashMap<>(); for(String w : words){ if(dp.containsKey(w)) continue; int best = 0; for(int i=0; i<w.length(); ++i){ String prev = w.substring(0, i) + w.substring(i+1);//remove i-th char best = Math.max(best, dp.getOrDefault(prev, 0)+1); } dp.put(w, best); ret = Math.max(ret, best); } return ret; } }
No comments:
Post a Comment