最长公共子串

来源:互联网 发布:淘宝流量是什么意思啊 编辑:程序博客网 时间:2024/06/03 13:24

一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。

输入格式:第一行两个字符串用空格分开。

输出格式:最长子串的长度。

两个串的长度均小于2000

样例输入

abccd aecd

样例输出

3

#include<iostream>

#include<cstdio>
#include<string.h>
using namespace std;
int c[2010][2010];
int main()
{
char s1[2010],s2[2010];
scanf("%s %s",s1+1,s2+1);
int m=strlen(s1+1);
int n=strlen(s2+1);
for(int i=0;i<=m;i++) c[i][0]=0;
for(int i=0;i<=n;i++) c[0][i]=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
if(s1[i]==s2[j]) c[i][j]=c[i-1][j-1]+1;
else if(c[i-1][j]>=c[i][j-1]) c[i][j]=c[i-1][j];
else
c[i][j]=c[i][j-1];
}
cout<<c[m][n]<<endl;
}
原创粉丝点击