标签:des style blog color io os ar java for
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.
Below is one possible representation of s1 = "great"
:
great / gr eat / \ / g r e at / a t
To scramble the string, we may choose any non-leaf node and swap its two children.
For example, if we choose the node "gr"
and swap its two children, it produces a scrambled string
"rgeat"
.
rgeat / rg eat / \ / r g e at / a t
We say that "rgeat"
is a scrambled string of "great"
.
Similarly, if we continue to swap the children of nodes "eat"
and
"at"
, it produces a scrambled string "rgtae"
.
rgtae / rg tae / \ / r g ta e / t a
We say that "rgtae"
is a scrambled string of "great"
.
Given two strings s1 and s2 of the same length, determine if s2 is a scrambled string of s1.
public class Solution { char[] array1; char[] array2; Map<Character, Integer> map = new HashMap<Character, Integer>(255); public boolean isScramble(int startIndex1, int endIndex1,int startIndex2,int endIndex2) { if (startIndex1 == endIndex1) { return array1[startIndex1] == array2[startIndex2]; } int index; for (index = 0; index <=endIndex1- startIndex1; index++ ) { if (array1[startIndex1+index] != array2[startIndex2+index]) { break; } } if (index > endIndex1- startIndex1) { return true; } map.clear(); for (index = startIndex1; index <= endIndex1; index++ ) { Integer value = map.get(array1[index]); map.put(array1[index], value == null ? 1 : value + 1); } for (index = startIndex2; index <= endIndex2; index++ ) { Integer value = map.get(array2[index]); if (value == null || value == 0) { return false; } map.put(array2[index], value - 1); } for (index = 0; index <endIndex1- startIndex1; index++ ) { if(isScramble(startIndex1, startIndex1+index,startIndex2,startIndex2+index) &&isScramble(startIndex1+index+1, endIndex1,startIndex2+index+1,endIndex2)) { return true; } if(isScramble(startIndex1, startIndex1+index,endIndex2-index,endIndex2) &&isScramble(startIndex1+index+1, endIndex1,startIndex2,endIndex2-index-1)) { return true; } } return false; } public boolean isScramble(String s1, String s2) { if (s1 == null || s2 == null || s1.length() != s2.length()) { return false; } if (s1.length() == 0) { return true; } array1 = s1.toCharArray(); array2 = s2.toCharArray(); return isScramble(0, array1.length - 1,0,array2.length-1); } }
标签:des style blog color io os ar java for
原文地址:http://blog.csdn.net/jiewuyou/article/details/40145299