dp找最长子序列和最长公共子串(小数据)
求最长公共子串dp方法
/**/中标注的是出错点,之前用的是数组从0开始扫,如果a[0]==b[0]的时候dp[i-1[j-1]数组越界了,报错。所以从1开始扫。当然要把dp数组先初始化为0。
ac代码如下
1.
#include<bits/stdc++.h>
using namespace std;
const int maxn=100+5;
char a[maxn],b[maxn];
int dp[maxn][maxn];
int i,j,result;
int Find()
{
result=0;
memset(dp,0,sizeof(dp));
for(i=1;a[i]!='\0';i++)
{/*i=0*/
for(j=1;b[j]!='\0';j++)
{/*j=0*/
if(a[i-1]==b[j-1])
/*a[i]==b[j]*/
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=0;
result=max(dp[i][j],result);
}
}
return result; }
int main() {
while(~scanf("%s",a+1))
{
scanf("%s",b+1);
printf("%d\n",Find());
}
return 0; }
未完待续