最长公共子串

来源:互联网 发布:c语言写的游戏 编辑:程序博客网 时间:2024/06/05 08:16

最长公共子串问题的基本表述为:
给定两个字符串,求出它们之间最长的相同子字符串的长度。

/** * 最长公共子串(连续) * @author 过路的守望 * */public class LongIncrementSub {    public static void main(String[] args) {        System.out.println(getLongestCommonSub("advdfdfdf", "dvdfd"));    }    public static String getLongestCommonSub(String A,String B){        int a_len = A.length();        int b_len = B.length();        int[][] dp = new int[a_len][b_len];        /*         * 记录长度         */        int size = 0;        /*         * 记录结束索引         */        int endindex = 0;        for(int i = 0;i<a_len;i++){            char a = A.charAt(i);            for(int j =0;j<b_len;j++){                char b =B.charAt(j);                if(a == b){                    /**                     * 若有一方起点为0,则公共长度为1。                     */                    if(i==0||j==0){                        dp[i][j] = 1;                    }                    else {                        dp[i][j] = dp[i-1][j-1]+1;                    }                    if(dp[i][j]>size){                        size = dp[i][j];                        endindex = i;                    }                }            }        }        return A.substring(endindex-size+1,endindex+1);    }}
0 0
原创粉丝点击