给定2个字符串,我们必须找到一个最小的字符串,以便给定的字符串是字符串的子序列。换句话说,我们需要找到一个字符串,以便删除某些字符会产生给定的字符串。正在考虑蛮力和LCS,但徒劳无功。
12345和11234应该导致112345 WWA和WWS有一个答案WWAS
LCS内存效率很低(DP一个),而暴力只是幼稚。我该怎么办?
答案 0 :(得分:0)
标准库中有一个定义良好的算法,可以满足您的需要。
set_union ();
条件是您的输入范围必须排序。
答案 1 :(得分:0)
也许您可以使用Needleman-Wunsch进行全局对齐以及高度不匹配惩罚,更喜欢indels。最后,通过从匹配位置获取字母,然后从任一个插入的字母中插入一个字母,将对齐合并为“父字符串”,例如:
WW-A
||
WWS-
WWSA
或者:
-12345
||||
11234-
112345
内存是 O(nm),但是modification会缩小到 O(min(n,m))。