最长的公共子字符串和子序列

时间:2018-09-08 12:31:00

标签: algorithm dynamic-programming subsequence longest-substring

有人能清楚解释最长公共子序列和最长公共子串的递归解以及它们之间的区别吗?

1 个答案:

答案 0 :(得分:0)

最长公共子序列是动态规划技术通常可以解决的经典问题。

字符串S,T的递归关系为:

/*Characters do not match*/
if(S[i]!=T[j])
   return max(LCS(i+1, j, S, T), LCS(i, j+1, S, T));
else 
   return LCS(i+1, j+1, S, T) + 1;

在这种情况下,i表示字符串S的索引,而字符串T的j表示字符串。在任何状态(i, j)处,都有可能出现以下情况:字符匹配或字符不匹配

  1. 如果字符不匹配,则有两个可能的选择。选择S的下一个字符或选择T的下一个字符,并充分利用这两种解决方案。
  2. 如果字符匹配,则迭代到两个字符串的下一个字符。

类似地,这可以解决子字符串