我的代码比较简单,希望能帮到大家
以两个字符串的长度,构造一个二维数组,然后遍历两个字符串进行匹配,如果相等,则将二维数组中的数据置1.
最终获取二维数组斜长最大的那份数据,就是最长的公共子串。
图片说明

public String LCS(String str1, String str2) {
    int[][] arr = new int[str1.length()][str2.length()];
    int start = 0, end = 0, max = 0;
    for (int i = 0; i < str1.length(); i++) {
        for (int j = 0; j < str2.length(); j++) {
            if (str1.charAt(i) == str2.charAt(j)) {
                arr[i][j] = 1;
            }
        }
    }

    for (int i = 0; i < str1.length(); i++) {
        for (int j = 0; j < str2.length(); j++) {
            if (arr[i][j] == 1) {
                int m = 1, ii = i + 1, jj = j + 1;
                while (ii < str1.length() && jj < str2.length()) {
                    if (arr[ii][jj] == 1) {
                        m++;
                        ii++;
                        jj++;
                    } else {
                        break;
                    }
                }
                if (m > max) {
                    start = i;
                    end = ii;
                    max = m;
                }
            }
        }
    }
    return str1.substring(start, end);
}