01-F-7: 递归LCS 递归版01

本文介绍了一个求解两个字符串之间最长公共子序列(LCS)长度的递归算法实现。通过具体示例演示了如何计算字符串program与algorithm之间的LCS长度为3的过程。

LCS(x,y)表示字符串x,y最长公共子序列长度,则LCS(“program”, “algorithm”)=3

初次尝试,有错请留言,O(∩_∩)O谢谢

#include <stdio.h>
int LCS(char *a,int la,char *b,int lb)
{
 if(la==-1&&lb==-1) return 0;
 for(char* ptr=a-la;ptr<=a;ptr++)
  printf("%c",*ptr);
 printf("\t");
 for(char* ptr=b-lb;ptr<=b;ptr++)
  printf("%c",*ptr);
 printf("\n");
 if(*a==*b) return LCS(a-1,la-1,b-1,lb-1)+1;
 int t1=LCS(a-1,la-1,b,lb);
 int t2=LCS(a,la,b-1,lb-1);
 return max(t1,t2);
}
int main()
{
 char a[]="program",b[]="algorithm";
 char *aa,*bb;
 int la=sizeof(a)/sizeof(char)-2;
 int lb=sizeof(b)/sizeof(char)-2;
 aa=&a[la];
 bb=&b[lb];
// printf("%d",la);
 printf("LCS(%s,%s)=%d\n",a,b,LCS(aa,la,bb,lb));
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值