【算法题解析】最长字符串链问题 —— 动态规划与前身关系判断
题目描述
给定一个单词数组 words
,其中每个单词都由小写英文字母组成。
如果我们可以在单词 wordA
中不改变其他字符顺序,通过添加恰好一个字母将它变成 wordB
,则称 wordA
是 wordB
的前身。
例如:
"abc"
是"abac"
的前身,因为在"abc"
中间插入'a'
后变成了"abac"
,且其他字符顺序不变。- 但
"cba"
不是"bcad"
的前身,因为顺序不对应。
一个词链是由单词组成的序列 [word_1, word_2, ..., word_k]
(k ≥ 1),满足:
word1
是word2
的前身,word2
是word3
的前身,- 依此类推。
单个单词也算长度为 1 的词链。
目标是:给定单词列表 words
,求最长的词链长度。
题目分析
这道题是典型的动态规划问题,类似于经典的“最长递增子序列”(LIS)问题,但有特殊的前驱关系定义