查找最长公共子串

用递归查找最长公共子串

动态规划有一个经典问题是最长公共子序列,但是这里的子序列不要求连续,如果要求序列是连续的,我们叫公共子串,那应该如何得到这个串呢?

最简单的方法就是依次比较,以某个串为母串,然后生成另一个串的所有长度的子串,依次去母串中比较查找,这里我们用递归查找最长公共子串。

import java.util.Scanner;
public class lookup {
 public static int  lcs(char[] x,char[] y,int i,int j) {
  if(i==0||j==0)
  return 0;
  else if(x[i]==y[j]) {
   return lcs(x,y,i-1,j-1)+1;
  }
  else
   return Math.max(lcs(x,y,i-1,j), lcs(x,y,i,j-1));
  
 }
  public static void main(String[] args) {
  String x="ABCBDAB";
  String y="BDCABA";
//  Scanner in=new Scanner(System.in);
//  System.out.println("请输入父集合");
//  x=in.nextLine();
//  System.out.println("请输入子集合");
//  y=in.nextLine();
  char [] c1=new char[x.length()+1];
  char [] c2=new char[y.length()+1];
  char[] t1=x.toCharArray();
  char [] t2=y.toCharArray();
  c1[0]=(char)0;
  c2[0]=(char)0;
  for(int i=0;i<t1.length;i++) {
   c1[i+1]=t1[i];
  }
  for(int i=0;i<t2.length;i++) {
   c2[i+1]=t2[i];
  }
  System.out.println(lcs(c1,c2, c1.length-1, c2.length-1));
 }
}

这里我为了方便调试,我直接将两个字符串赋值,如果想要其他的字符串直接将注释符去掉即可。

这是运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值