Longest String Chain
JavaView on GFG
Advertisement
Intuition
Longest chain of words where each word adds one letter to the previous. DP with sorted lengths.
Algorithm
- 1Sort by length. dp[word] = max(dp[pred]+1) for all predecessors obtained by removing one char.
Common Pitfalls
- •Same as LC 1048. Try removing each character from current word to find predecessor. O(n*L^2) where L = max word length.
Longest String Chain.java
Java
// Approach: Sort by word length. DP: for each word, try removing each character and check if predecessor is in chain.
// Time: O(n * len^2) Space: O(n * len)
class Solution {
public int longestStringChain(String words[]) {
// Step 1: Sort the words by their lengths
Arrays.sort(words, (a, b) -> a.length() - b.length());
// Step 2: Create a map to store the longest chain length for each word
Map<String, Integer> dp = new HashMap<>();
int maxLength = 1; // At least one word in the chain
// Step 3: Process each word
for (String word : words) {
int currentLength = 1; // Start with a chain of length 1 (the word itself)
// Generate all possible predecessors by removing one character
for (int i = 0; i < word.length(); i++) {
String predecessor = word.substring(0, i) + word.substring(i + 1);
// Check if the predecessor exists in the map
if (dp.containsKey(predecessor))
currentLength = Math.max(currentLength, dp.get(predecessor) + 1);
}
// Update the DP map with the current word's chain length
dp.put(word, currentLength);
// Update the maximum chain length
maxLength = Math.max(maxLength, currentLength);
}
return maxLength;
}
}Advertisement
Was this solution helpful?