最长公共子序列(Sequence not SubString)

来源:互联网 发布:油性染料 淘宝 编辑:程序博客网 时间:2024/06/08 10:31
public class LCSDP {    /*     *BackGround:LCS     *1、初始化     *2、a[i][j]由a[i-1][j-1]等3种情况     */    static int lcsDP(String a,String b){        if(a==null||a==""||b==null||b=="")        return 0;        int maxLen=a.length()>b.length()?a.length()+1:b.length()+1;        int sto[][]=new int[maxLen][maxLen];        //DP        int i=1;        for(;i<=a.length();i++){            for(int j=1;j<=b.length();j++){                if(a.charAt(i-1)==b.charAt(j-1))                sto[i][j]=sto[i-1][j-1]+1;                else{                    //i,j,k,意思是第i,j,k轮                    //若a[i-1]!=b[j-1],且c[k-1]!=b[j-1]=>c[k-1]由a[i-1]和b[j-2]得出,                    //即sto[i][j]=sto[i][j-1]+0;                    if(sto[i][j-1]>=sto[i-1][j])                    sto[i][j]=sto[i][j-1];                    else                        sto[i][j]=sto[i-1][j];                }            }           }        return sto[a.length()][b.length()];    }    public static void main(String[] args) {        System.out.println(lcsDP("abcd", "bd"));    }}

Result:2

0 0