LCS最长公共序列java实现模板

版权声明:范明毅的个人博客,欢迎转载,转载请注明出处 https://blog.csdn.net/qfanmingyiq/article/details/79705584
  • 不提供思想 提供了就是制作车轮子.网上太多了没意义

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {


        String a = "abcdef";
        String b = "xb1d2xf3";

        int[][] calc = calc(a.toCharArray(), b.toCharArray());
        int flag=Integer.MAX_VALUE;
        //输出序列

        for (int i = 1; i < calc[0].length; i++) {
            if(calc[calc.length-1][i]>calc[calc.length-1][i-1]){
                System.out.println(b.charAt(i-1));
            }
        }

    }


    public static StringBuilder sb= new StringBuilder("");
    //计算最长序列
    //int[][] 封装对象的话 输出序列会不用循环 内部封装链表.由于简单这里不写了 
    public static int[][] calc(char[]a,char b[]){

        int flag[][]=new int[a.length+1][b.length+1];


        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) {
                if(a[i]==b[j]){ 
                    flag[i+1][j+1]=flag[i][j]+1;
                }else{
                    flag[i+1][j+1]=Math.max(flag[i][j+1], flag[i+1][j]);
                }
            }
        }
        return flag;
    }

}
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页