1 public class Solution { 2 public boolean isScramble(String s1, String s2) { 3 // IMPORTANT: Please reset any member data you declared, as 4 // the same Solution instance will be reused for each test case. 5 int n=s1.length(); 6 boolean[][][] dp=new boolean[n][n][n+1]; 7 8 for(int i=n-1; i>=0; i--) 9 for(int j=n-1; j>=0; j--) 10 for(int k=1; k<=n-Math.max(i,j);k++) 11 { 12 if(s1.substring(i,i+k).equals(s2.substring(j,j+k))) 13 dp[i][j][k]=true; 14 else 15 { 16 for(int l=1; l<k; l++) 17 { 18 if(dp[i][j][l] && dp[i+l][j+l][k-l] || dp[i][j+k-l][l] && dp[i+l][j][k-l]) 19 { 20 dp[i][j][k]=true; 21 break; 22 } 23 } 24 } 25 } 26 27 return dp[0][0][n]; 28 } 29 }