我知道如何使用动态编程来解决给定两个字符串查找最长公共子序列或最长公共子串的问题。但是,我很难找到解决字符串 X 的最长子序列(字符串 Y 的子串)的问题的解决方案。
这是我的蛮力解决方案:
- 找到字符串 X 的所有子序列,并按长度 desc 对它们进行排序;
- 遍历排序后的子序列,如果当前子序列是 Y 的子串,则返回子序列。
它可以工作,但运行时间可能很糟糕。假设 X 中的所有字符都是唯一的,那么有 2^m 个子序列,其中 m 是 X 的长度。我认为检查字符串是否是 Y 的子字符串需要 O(n),其中 n 是 Y 的长度。所以总运行时间为 O(n*2^m)。
是否有更好的方法来做到这一点,可能通过 DP?
编辑:
这是我要解决的示例:
Y: 'BACDBDCD'
X: 'ABCD'
答案是“ACD”,因为“ACD”是X 的最长子序列,也是Y 的子串。