87. 扰乱字符串

class Solution {
    public boolean isScramble(String s1, String s2) {
        int n = s1.length();
        if(n == 0) return true;
        if(s1.equals(s2)) return true;
        int[] arr = new int[26];
        char[] arr1 = s1.toCharArray();
        char[] arr2 = s2.toCharArray();
        for(int i = 0; i < n; i++) {
            arr[arr1[i] - 'a']++;
            arr[arr2[i] - 'a']--;
        }
        for(int i = 0; i < 26; i++) {
            if(arr[i] != 0) return false; // 先判断是否同构
        }
        for(int i = 1; i < n; i++) {  // 再选一个分割点,对字符串AB/CD进行两种情况匹配的回溯,AC/BD和AD/BC
            if(isScramble(s1.substring(0,i), s2.substring(n - i, n)) && isScramble(s1.substring(i,n), s2.substring(0,n-i))
            || (isScramble(s1.substring(0,i),s2.substring(0,i)) && isScramble(s1.substring(i,n), s2.substring(i,n)))) {
                return true;
            } 
        }
        return false;
    }
}
原文地址:https://www.cnblogs.com/yonezu/p/13272065.html