可以发现只有当两个序列中都没有重复元素时(1~n的排列)此种优化才是高效的,不然可能很不稳定。
求a[] 与b[]中的LCS
通过记录lis[i]表示a[i]在b[]中的位置,将LCS问题转化为最长上升子序列问题,转化方法如下:
for(int i=1;i<=n;i++){
local[b[i]]=i;
}
for(int i=1;i<=n;i++){
lis[i]=local[a[i]];
}
当序列中有元素重复时,我们们需要保证对于每个a[i]所记录的位置必须是逆序的,以保证一个元素只取一次。
例:举例说明:
A:abdba
B:dbaaba
则1:先顺序扫描A串,取其在B串的所有