题目描述:
在两个字符串中找到最长公共子串,输出其长度
分析:公共子串是连续的,所以要和公共子序列进行区分。用动态规划进行求解,写出递推关系式
其中,C[i][j]表示的是,以a[i]和以b[j]结尾的符合要求的最优解,很显然,如果两个不相等,那么就不存在以这两个结尾的公共子串,所以值为0,如果相等,那就看去掉他们两个之后的串中的最优解
具体代码如下
#include<iostream>
using namespace std;
#define MAX 1002
int dp[MAX][MAX]={0};
string a,b;
int main(){
cin>>a>>b;
int m=0;
for(int i=1;i<=a.length();i++){
for(int j=1;j<=b.length();j++){
if(a[i-1]==b[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=0;
if(dp[i][j]>m)
m=dp[i][j];
}
}
cout<<m<<endl;
return 0;
}