Scramble String

这道题应该是最复杂的一道DP了,首先题意上的左右旋转就很难理解,其次因为维度太高一般难以想到,这里思路直接放九章的截图了

下面是代码

public class Solution {
    public boolean isScramble(String s1, String s2) {
        char[] a = s1.toCharArray();
        char[] b = s2.toCharArray();

        if (a.length != b.length) {
            return true;
        }

        int n = a.length;

        boolean[][][] dp = new boolean[n][n][n + 1];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                dp[i][j][1] = (a[i] == b[j]);
            }
        }

        for (int k = 2; k < n + 1; k++) {
            for (int i = 0; i < n - k + 1; i++) {
                for (int j = 0; j < n - k + 1; j++) {
                    dp[i][j][k] = false;
                    for (int w = 1; w < k; w++) {
                        if (dp[i][j][w] && dp[i + w][j + w][k - w]) {
                            dp[i][j][k] = true;
                            break;
                        }

                        if (dp[i][j + k - w][w] && dp[i + w][j][k - w]) {
                            dp[i][j][k] = true;
                            break;
                        }
                    }
                }
            }
        }

        return dp[0][0][n];
    }
}

results matching ""

    No results matching ""