304 North Cardinal St.
Dorchester Center, MA 02124

# Longest String Chain LeetCode Solution

## Problem – Longest String Chain

You are given an array of `words` where each word consists of lowercase English letters.

`wordA` is a predecessor of `wordB` if and only if we can insert exactly one letter anywhere in `wordA` without changing the order of the other characters to make it equal to `wordB`.

• For example, `"abc"` is a predecessor of `"abac"`, while `"cba"` is not a predecessor of `"bcad"`.

word chain is a sequence of words `[word1, word2, ..., wordk]` with `k >= 1`, where `word1` is a predecessor of `word2``word2` is a predecessor of `word3`, and so on. A single word is trivially a word chain with `k == 1`.

Return the length of the longest possible word chain with words chosen from the given list of `words`.

Example 1:

``````Input: words = ["a","b","ba","bca","bda","bdca"]
Output: 4
Explanation: One of the longest word chains is ["a","ba","bda","bdca"].``````

Example 2:

``````Input: words = ["xbc","pcxbcf","xb","cxbc","pcxbc"]
Output: 5
Explanation: All the words can be put in a word chain ["xb", "xbc", "cxbc", "pcxbc", "pcxbcf"].``````

Example 3:

``````Input: words = ["abcd","dbqca"]
Output: 1
Explanation: The trivial word chain ["abcd"] is one of the longest word chains.
["abcd","dbqca"] is not a valid word chain because the ordering of the letters is changed.``````

Constraints:

• `1 <= words.length <= 1000`
• `1 <= words[i].length <= 16`
• `words[i]` only consists of lowercase English letters.

### Longest String Chain LeetCode Solution in Python

``````    def longestStrChain(self, words):
dp = {}
for w in sorted(words, key=len):
dp[w] = max(dp.get(w[:i] + w[i + 1:], 0) + 1 for i in xrange(len(w)))
return max(dp.values())``````

### Longest String Chain LeetCode Solution in C++

``````    static bool compare(const string &s1, const string &s2) {
return s1.length() < s2.length();
}

int longestStrChain(vector<string>& words) {
sort(words.begin(), words.end(), compare);
unordered_map<string, int> dp;
int res = 0;
for (string w : words) {
for (int i = 0; i < w.length(); i++) {
string pre = w.substr(0, i) + w.substr(i + 1);
dp[w] = max(dp[w], dp.find(pre) == dp.end() ? 1 : dp[pre] + 1);
}
res = max(res, dp[w]);
}
return res;
}``````

### Longest String Chain LeetCode Solution in Java

``````    public int longestStrChain(String[] words) {
Map<String, Integer> dp = new HashMap<>();
Arrays.sort(words, (a, b)->a.length() - b.length());
int res = 0;
for (String word : words) {
int best = 0;
for (int i = 0; i < word.length(); ++i) {
String prev = word.substring(0, i) + word.substring(i + 1);
best = Math.max(best, dp.getOrDefault(prev, 0) + 1);
}
dp.put(word, best);
res = Math.max(res, best);
}
return res;
}``````
##### Longest String Chain LeetCode Solution Review:

In our experience, we suggest you solve this Longest String Chain LeetCode Solution and gain some new skills from Professionals completely free and we assure you will be worth it.

If you are stuck anywhere between any coding problem, just visit Queslers to get the Longest String Chain LeetCode Solution

Find on LeetCode

##### Conclusion:

I hope this Longest String Chain LeetCode Solution would be useful for you to learn something new from this problem. If it helped you then don’t forget to bookmark our site for more Coding Solutions.

This Problem is intended for audiences of all experiences who are interested in learning about Data Science in a business context; there are no prerequisites.

Keep Learning!

More Coding Solutions >>

LeetCode Solutions

Hacker Rank Solutions

CodeChef Solutions