手记

使用动态规划计算最长公共子串


public class MatchStr {

    public static String a="abcdfishftfuia345345345";

    public static String b="foshdguuuutfu345345345abcd";

    public static void main(String [] arg){

        char[] c1=  a.toCharArray();      

        char[] c2 = b.toCharArray();      

        int [] [] all=new int[c1.length][c2.length];      

        for(int i=0; i<c1.length; i++){           

            for(int j=0; j<c2.length; j++){              

                all[i][j]=0;

            }           

        } 

        List<Character> list=new ArrayList<>();

        for(int i=0; i<c1.length; i++){          

            for(int j=0; j<c2.length; j++){             

                if(c1[i]==c2[j]){                 

                    int a1=i-1;

                    if(a1<0){

                        a1=0;

                    }               

                    int b1=j-1;

                    if(b1<0){

                        b1=0;

                    }                   

                    all[i][j]=all[a1][b1]+1;  

                }else{

                    all[i][j]=0;

                }         

            }

        }

        int maxx=0;

        int maxy=0;

        int max=0;

        for(int i=0; i<c1.length; i++){           

            for(int j=0; j<c2.length; j++){  

                if(all[i][j]>max){

                    maxx=i;

                    maxy=j;

                    max=all[i][j];

                }

            }      

        } 

        System.out.println(max+"->"+maxx+"->"+maxy);      

        for(int i=0; i<max; i++){

            list.add(c1[maxx-i]);

        }     

        Collections.reverse(list);     

        for(int i=0; i<list.size(); i++){           

            System.out.print(list.get(i));

        }

    }

}

©著作权归作者所有:来自51CTO博客作者大海之中的原创作品,如需转载,请注明出处,否则将追究法律责任


0人推荐
随时随地看视频
慕课网APP