Scramble String

2018-10-15  本文已影响0人  BLUE_fdf9

题目
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.

答案

class Solution {
    public boolean isScramble(String ss1, String ss2) {
        int n = ss1.length();
        if(ss2.length() != n) return false;
        char[] s1 = ss1.toCharArray(), s2 = ss2.toCharArray();
        boolean[][][] f = new boolean[n][n][n + 1];

        // len = 1
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++)
                f[i][j][1] = (s1[i] == s2[j]);
        }

        for(int len = 2; len <= n; len++) {
            for(int i = 0; i <= n - len; i++) {
                for(int j = 0; j <= n - len; j++) {
                    f[i][j][len] = false;

                    // S = S1 S2
                    // T = T1 T2

                    // If S1 可以变成T1, S2可以变成T2, we are happy :)
                    // If S1 可以变成T2, S2可以变成T1, we are also happy :)

                    for(int w = 1; w <= len - 1; w++) {

                        if(f[i][j][w] && f[i + w][j + w][len - w])
                            f[i][j][len] = true;

                        if(f[i][j + len - w][w] && f[i + w][j][len - w])
                            f[i][j][len] = true;
                    }
                }
            }
        }
        return f[0][0][n];
    }
}
上一篇下一篇

猜你喜欢

热点阅读