| 1234567891011121314151617181920212223242526272829303132333435 | 
							- package main
 
- func isScramble(s1 string, s2 string) bool {
 
- 	if s1 == s2 {
 
- 		return true
 
- 	}
 
- 	cnt := make([]int, 26)
 
- 	for i := range s1 {
 
- 		cnt[s1[i]-'a']++
 
- 	}
 
- 	for i := range s2 {
 
- 		cnt[s2[i]-'a']--
 
- 	}
 
- 	for i := range cnt {
 
- 		if cnt[i] != 0 {
 
- 			return false
 
- 		}
 
- 	}
 
- 	n := len(s1)
 
- 	for i := 1; i < n; i++ { // Can be spilt at any position!!!
 
- 		if isScramble(s1[:i], s2[:i]) && isScramble(s1[i:], s2[i:]) {
 
- 			return true
 
- 		}
 
- 		// Swap sub tree
 
- 		if isScramble(s1[:i], s2[n-i:]) && isScramble(s1[i:], s2[:n-i]) {
 
- 			return true
 
- 		}
 
- 	}
 
- 	return false
 
- }
 
- // func main() {
 
- // 	println(isScramble("great", "rgeat"))
 
- // 	println(isScramble("abcde", "caebd"))
 
- // }
 
 
  |