🌕🌕 87. 扰乱字符串

吞佛童子2022年10月10日
  • algorithm
  • dp
小于 1 分钟

🌕🌕 87. 扰乱字符串

难度: 🌕🌕

问题描述

img_10.png


解法

class Solution {
    public boolean isScramble(String s1, String s2) {
        // 思路:
        // dp[i][j][k] - 以 [i] 为左边界,[j] 为左边界,len == k 的字符串是否为扰乱字符串
        int len = s1.length();
        if(len == 1) {
            return s1.equals(s2);
        }
        if(s1.equals(s2)) {
            return true;
        }
        // len > 1
        boolean[][][] dp = new boolean[len][len][len + 1];
        // 初始化
        for(int i = 0; i < len; i ++) {
            for(int j = 0; j < len; j ++) {
                if(s1.charAt(i) == s2.charAt(j)) {
                    dp[i][j][1] = true;
                }
            }
        }
        // dp
        for(int size = 2; size <= len; size ++) {
            for(int i = 0; i < len - size + 1; i ++) {
                for(int j = 0; j < len - size + 1; j ++) {
                    for(int k = 1; k < size; k ++) {
                        // System.out.println(i + "  " + j  + "  " + k);
                        if((dp[i][j][k] && dp[i + k][j + k][size - k]) 
                            || (dp[i][j + size - k][k] && dp[i + k][j][size - k])) {
                            dp[i][j][size] = true;
                            // System.out.println(i + "  " + j  + "  " + k + " --------");
                        }
                    }
                }
            }
        }
        return dp[0][0][len];
    }
}

输出

img_9.png

上次编辑于: 2022/10/10 下午8:43:48
贡献者: liuxianzhishou