23.4.27每日一题
题目意思为单词数组获取单词链的最大长度,单词链就是该单词可以由数组内另外一个单词再任意地方加一个字母组成该单词,就可以构成单词链。
思路 对单词按照长度进行排序,因为单词链的长度是逐步增加的,用map进行保存以该单词为终点的单词链最大长度,对每个单词进行分割遍历,是否有可以匹配的单词可以合成单词链,有的话计算长度,然后统计最大值。
class Solution {
public int longestStrChain(String[] words) {
Map<String, Integer> cnt = new HashMap<String, Integer>();
Arrays.sort(words, (a, b) -> a.length() - b.length());
int res = 0;
for (String word : words) {
cnt.put(word, 1);
for (int i = 0; i < word.length(); i++) {
String prev = word.substring(0, i) + word.substring(i + 1);
if (cnt.containsKey(prev)) {
cnt.put(word, Math.max(cnt.get(word), cnt.get(prev) + 1));
}
}
res = Math.max(res, cnt.get(word));
}
return res;
}
}
时间复杂度O(nlogn+nm) n为数组长度,m为字符串长度
空间复杂度O(n)