刷题日记--最长公共子串问题

题目描述:给定两个字符串str1和str2,输出两个字符串的最长公共子串

abcde bebcd == > bcd

实现代码:

实现代码

public class MaxSubString {
    public static void main(String[] args){
        String st1  = "abcde";
        String st2 = "ace";
        System.out.println(lstc1(st1,st2));

    }
    public static int[][] getdp(char[] str1,char[] str2){
        int[][] dp = new int[str1.length][str2.length];
        for(int i = 0;i < str1.length;i++){
            if(str1[i] == str2[0]){
                dp[i][0] = 1;
            }
        }
        for(int j = 1;j < str2.length;j++){
            if(str1[0] == str2[j]){
                dp[0][j] = 1;
            }
        }
        for(int i = 1;i < str1.length;i++){
            for(int j = 1;j < str2.length;j++){
                if(str1[i] == str2[j]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                }
            }
        }
        return dp;

    }
    
    public static String lstc1(String str1,String str2){
        if(str1 == null || str2 == null || str1.equals("")||str2.equals("")){
            return "";
        }
        char[] cha1 = str1.toCharArray();
        char[] cha2 = str2.toCharArray();
        int[][] dp = getdp(cha1,cha2);
        int end = 0;
        int max = 0;
        for(int i = 0;i < cha1.length;i++){
            for(int j = 0;j < cha2.length;j++){
                if(dp[i][j] > max){
                    end = i;
                    max = dp[i][j];
                }
            }
        }
        return str1.substring(end - max + 1,end + 1);

    }
}

输出结果:

a

posted @ 2023-06-04 17:44  99号的格调  阅读(7)  评论(0编辑  收藏  举报