我知道如何使用动态规划来解决找到两个字符串之间的最长公共子序列或最长公共子串的问题。然而,我很难找到一种解决方法来找到字符串X的最长子序列,该子序列是字符串Y的子串。
答案是 'ACD',因为'ACD'是X的最长子序列,也是Y的子字符串。
这是我暴力解决方案:
- 查找字符串X所有子序列,并按长度降序排序;
- 遍历排序后的子序列,如果当前子序列是Y的子串,则返回该子序列。
它可以工作,但运行时间可能很糟糕。假设X中的所有字符都是唯一的,则有2^m个子序列,其中m是X的长度。我认为检查一个字符串是否是Y的子串需要O(n)的时间,其中n是Y的长度。因此,总运行时间为O(n*2^m)。
有更好的方法来解决这个问题吗?可能通过DP实现?
编辑:
这里是我想要解决的问题的示例:
Y: 'BACDBDCD'
X: 'ABCD'
答案是 'ACD',因为'ACD'是X的最长子序列,也是Y的子字符串。