而要找到最大公共子串,我们可以把问题转化为求最长不下降子序列。
怎样求最长不下降子序列呢?我们需要生成第三个数组C,当A[j]=B[i]时,C[i]=j;这个数组什么意义呢?你自己想想吧,然后对这个数组求最长不下降子序列,这个最长不下降子序列的长度就是最大公共子串的长度。
N减去它就是答案。
生成C数组的复杂度为O(n),求Lis是O(nlogn)。这样就是思路了。
你可以先研究下 LIS 的 O(nlgn) 算法
但是为什么能得出c数组呢? 为什么要lis呢?
望牛解答……
太经典了Orz
快速帮助 | 运行状态 | 反馈举报 | 关于我们 | 免责声明 | 浙ICP备11060257号 Processed in 0.0033 Second(s) Copyright (C) RQNOJ 2007-2019. All Rights Reserved.