最大公共子串问题
这个是动态规划的基础题目。动态规划就是递推和重复子结构。
确定了递推关系后。找到一个能极大地减少重复运算的子结构至关重要。选的好了,时间效率会很好。
这个问题,不妨设第一个串为a,长度为n,第二个串为b,长度m。那么最长的子序列长度为f(n,m)
当a[n]=a[m]时
f(n,m)=1+f(n-1,m-1)
否则f(n,m)=max(f(n-1),f(m-1))
同时建立一个存储计算过的f(x,y)的矩阵,如果计算过了就直接使用
程序如下所示
【博客整理】