leetcode SCS 最短公共超序列

参考
Longest common subsequence

然后回溯dp[][] matrix


    public String shortestCommonSupersequence(String str1, String str2) {
        int m = str1.length();
        int n = str2.length();
        char[] char1 = str1.toCharArray();
        char[] char2 = str2.toCharArray();
        int[][] dp = LCS(str1, str2);
        StringBuilder sb = new StringBuilder();
        int i = m, j = n;
        while (i > 0 || j > 0) {
            char ch = ' ';
            if (i == 0) {
                ch = char2[j - 1];
                j--;
            } else if (j == 0) {
                ch = char1[i - 1];
                i--;
            } else if (char1[i - 1] == char2[j - 1]) {
                ch = char1[i - 1];
                i--;
                j--;
            } else if (dp[i][j - 1] == dp[i][j]) {
                ch = char2[j - 1];
                j--;
            } else if (dp[i - 1][j] == dp[i][j]) {
                ch = char1[i - 1];
                i--;

            }
            sb.append(ch);
        }
        return sb.reverse().toString();
    }

    private int[][] LCS(String str1, String str2) {
        int m = str1.length(), n = str2.length();
        int[][] dp = new int[m + 1][n + 1];
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }
        return dp;
    }

 

posted @ 2021-11-28 20:37  ou尼酱~~~  阅读(102)  评论(0)    收藏  举报