class Solution {
public boolean isScramble(String s1, String s2) {
if (s1.equals(s2)) {
return true;
}
if (s1.length() != s2.length()) {
return false;
}
int[] count = new int[26];
// Check if s1 and s2 has the same characters
for (int i = 0; i < s1.length(); i++) {
++count[s1.charAt(i) - 'a'];
--count[s2.charAt(i) - 'a'];
}
for (int i = 0; i < 26; i++) {
if (count[i] != 0) {
return false;
}
}
int n = s1.length();
// Check if s1 and s2 are scrambled strings using recursion
for (int i = 1; i < n; i++) {
if (isScramble(s1.substring(0, i), s2.substring(0, i)) && isScramble(s1.substring(i), s2.substring(i))
|| (isScramble(s1.substring(0, i), s2.substring(n - i)) && isScramble(s1.substring(i), s2.substring(0, n - i)))) {
return true;
}
}
return false;
}
}