Skip to content

Commit

Permalink
rewrite
Browse files Browse the repository at this point in the history
  • Loading branch information
mengli committed Jan 5, 2014
1 parent 15b648d commit 0f6efa5
Showing 1 changed file with 22 additions and 32 deletions.
54 changes: 22 additions & 32 deletions ScrambleString.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@


import java.util.Arrays;

/**
* Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.
*
Expand Down Expand Up @@ -43,39 +39,33 @@

public class ScrambleString {
public boolean isScramble(String s1, String s2) {
int length1 = s1.length();
int length2 = s2.length();
if (length1 != length2)
if (s1.length() != s2.length())
return false;

if (length1 == 0 || s1.equals(s2))
if (s1.equals(s2))
return true;

char[] ca1 = s1.toCharArray();
char[] ca2 = s2.toCharArray();
Arrays.sort(ca1);
Arrays.sort(ca2);
if (!Arrays.equals(ca1, ca2))
return false;
int[] A = new int[26];
for (int i = 0; i < s1.length(); i++) {
++A[s1.charAt(i) - 'a'];
}

int i = 1;
while (i < length1) {
String a1 = s1.substring(0, i);
String b1 = s1.substring(i, length1);
String a2 = s2.substring(0, i);
String b2 = s2.substring(i, length2);
if (a1.equals(b2) && b1.equals(a2))
return true;
boolean r = isScramble(a1, a2) && isScramble(b1, b2);
if (!r) {
String c2 = s2.substring(0, length1 - i);
String d2 = s2.substring(length1 - i);
r = isScramble(a1, d2) && isScramble(b1, c2);
}
if (r)
return true;
i++;
for (int j = 0; j < s2.length(); j++) {
--A[s2.charAt(j) - 'a'];
}

for (int k = 0; k < 26; k++) {
if (A[k] != 0) return false;
}

for (int i = 1; i < s1.length(); i++) {
boolean result = isScramble(s1.substring(0, i), s2.substring(0, i)) && isScramble(s1.substring(i), s2.substring(i));
result = result || (isScramble(s1.substring(0, i), s2.substring(s2.length() - i, s2.length())) && isScramble(s1.substring(i), s2.substring(0, s2.length() - i)));
if (result) return true;
}
return false;
}

public static void main(String[] args) {
System.out.println(new ScrambleString().isScramble("aab", "bab"));
}
}

0 comments on commit 0f6efa5

Please sign in to comment.