最长公共子字符串

来源:互联网 发布:犀牛mac破解版下载 编辑:程序博客网 时间:2024/05/21 21:33

最长公共子字符串
这是一个非常的经典的动态规划问题。
解题思路:
创建一个二维数组,dp[n][m],其中dp[i][j]表示取到s1[i]和s2[j]时的最大连续子串长度。如果s1[i]等于s2[j]时,dp[i][j]=dp[i-1][j-1]+1。

public class day43 {    public static void main(String[] args) {        String str1="abcdef";        String str2="cdab";        System.out.println(maxCommonLengthOfTwoStr(str1,str2));    }    private static int maxCommonLengthOfTwoStr(String str1,String str2) {        int str1_len=str1.length();        int str2_len=str2.length();        int maxCommonLen=0;        int[][] dp=new int[str1_len][str2_len];        for(int i=0;i<str1_len;i++) {            for(int j=0;j<str2_len;j++) {                if(str1.charAt(i)==str2.charAt(j)) {                    if(i>0&&j>0) {                        dp[i][j]=dp[i-1][j-1]+1;                    }else{                        dp[i][j]=1;                    }                }                if(maxCommonLen<dp[i][j]) {                    maxCommonLen=dp[i][j];                }            }        }        return maxCommonLen;    }}
原创粉丝点击