题目大意:
计算两个字符串的最长公共子序列
解题思路:
标准算法,可以当做模板记住
代码如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int n1,n2;
char str1[500],str2[500];
int c[500][500];
void LCS(char str1[100],char str2[100],
int n1,int n2,int c[500][500])
{
int i,j;
for(i=1;i<=n1;i++) c[i][0]=0;
for(i=1;i<=n2;i++) c[0][i]=0;
for(i=1;i<=n1;i++)
{
for(j=1;j<=n2;j++)
{
if(str1[i]==str2[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];
}
}
}
}
int main()
{
int i,j;
while(scanf("%s",str1)==1)
{
scanf("%s",str2);
n1=strlen(str1);n2=strlen(str2);
for(i=n1-1;i>=0;i--)
str1[i+1]=str1[i];
for(i=n2-1;i>=0;i--)
str2[i+1]=str2[i];
LCS(str1,str2,n1,n2,c);
printf("%d\n",c[n1][n2]);
}
return 0;
}