继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

holdtom
关注TA
已关注
手记 1890
粉丝 240
获赞 993


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博客作者大海之中的原创作品,如需转载,请注明出处,否则将追究法律责任


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP