LCS算法
问题描述
找出两个字符串的最长子序列串长度
伪代码
样例
手推过程
代码运行结果
核心代码
#include<stdio.h>
#include<string.h>
char s1[100],s2[100];
int l1,l2;
int c[100][100];
lcs(int x,int y){
int i,j;
c[0][y]=0;
c[x][0]=0;
for (i=1;i<=x;i++)
{
for(j=1;j<=y;j++)
{
if(s1[i]==s2[j])
c[i][j]=c[i-1][j-1]+1;
else
{
if(c[i][j-1]>c[i-1][j])
c[i][j]=c[i][j-1];
else
c[i][j]=c[i-1][j];
}
}
}
return c[x][y];
}
int main()
{
gets(s1);
gets(s2);
l1=strlen(s1);
l2=strlen(s2);
printf("%d\n",lcs(l1,l2));
}
时间复杂度
T(N)=O(MN)
git源码
https://github.com/1651928813/Pepsi_juice/tree/master/%E4%BD%9C%E4%B8%9A%E4%B9%9D