思路:
有两个字符数组a,b
分为三种情况:
比较a,b数组当前长度的最后一个字符
- 相等时, lsc值等于前一段值加1
即:当a[i-1]==b[j-1]时(因为i,j是从1开始,所以是a[i-1],b[j-1]),lsc[i][j]=lsc[i-1][j-1]+1 - 不相等,把a数组的最后一个字符去掉的最长公共子序列大于把b数组的最后一个字符去掉的最长公共子序列
即:当lsc[i-1][j]>=lsc[i][j-1]时,lsc[i][j]=lsc[i-1][j] - 不相等,把b数组的最后一个字符去掉的最长公共子序列大于把a数组的最后一个字符去掉的最长公共子序列
即:当lsc[i-1][j]<lsc[i][j-1]时,lsc[i][j]=lsc[i][j-1]
代码:
#include <stdio.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void LSCLength(char a[],char b[],int c[11][10],int lsc[11][10],int la,int lb)
{
for(int i=0;i<=la;i++) lsc[0][i]=0;
for(int i=0;i<=lb;i++) lsc[i][0]=0;
for(int i=1;i<=la;i++)
{
for(int j=1;j<=lb;j++){
if(a[i-1]==b[j-1])
{
lsc[i][j]=lsc[i-1][j-1]+1;
c[i][j]=1;
}
else if(lsc[i-1][j]>=lsc[i][j-1])
{
lsc[i][j]=lsc[i-1][j];
c[i][j]=2;
}
else{
l