两个给定字符串的父字符串

时间:2014-12-04 12:32:23

标签: c++ string lcs subsequence

给定2个字符串,我们必须找到一个最小的字符串,以便给定的字符串是字符串的子序列。换句话说,我们需要找到一个字符串,以便删除某些字符会产生给定的字符串。正在考虑蛮力和LCS,但徒劳无功。

12345和11234应该导致112345 WWA和WWS有一个答案WWAS

LCS内存效率很低(DP一个),而暴力只是幼稚。我该怎么办?

2 个答案:

答案 0 :(得分:0)

标准库中有一个定义良好的算法,可以满足您的需要。

set_union ();

条件是您的输入范围必须排序。

答案 1 :(得分:0)

也许您可以使用Needleman-Wunsch进行全局对齐以及高度不匹配惩罚,更喜欢indels。最后,通过从匹配位置获取字母,然后从任一个插入的字母中插入一个字母,将对齐合并为“父字符串”,例如:

WW-A
||  
WWS-

WWSA

或者:

-12345
 ||||
11234-

112345

内存是 O(nm),但是modification会缩小到 O(min(n,m))