最大公共子串LCS(Java实现)

来源:互联网 发布:淘宝ugg授权书怎么弄 编辑:程序博客网 时间:2024/06/07 16:52

转至:http://blog.csdn.net/earbao/article/details/50424948
这篇文章讲的听清楚了,根据他的思路,我自己写了一遍代码,并放弃考虑有多个答案的情况。

public class Lcs {    public static String longest(String s1,String s2){        char ch1[]=s1.toCharArray();        char ch2[]=s2.toCharArray();        int length1=ch1.length;        int length2=ch2.length;        /*        这里其实还可以考虑一下那个数组较长,在下面创建mat数组时可以节省一点空间,在两个数组长度相差较大时能节省较多空间。        */        int max=0;        int sign=0;        int[] mat=new int[length1];         for(int i=0;i<length2;i++){            for(int j=length1-1;j>=0;j--){                if(ch2[i]==ch1[j]){                    if(i==0 || j==0){                        mat[j]=1;                        if(max==0){                            max=1;                            sign=j;                        }                           }                    else{                        mat[j]=mat[j-1]+1;                        if(mat[j]>max){                            max=mat[j];                            sign=j;                        }                    }                       }                else{                    mat[j]=0;                }            }        }        return new String(ch1, sign-max+1, max);    }    public static void main(String[] args) {        String s1="erecadhssjdgd";        String s2="abcadhssjda";        System.out.println(longest(s1, s2));    }}
0 0
原创粉丝点击