class Solution {
public boolean isScramble(String s1, String s2) {
int len1 = s1.length();
int len = len1;
int len2 = s2.length();
if(len1!=len2) return false;
if(s1.equals(s2)) return true;
int[] nums = new int[26];
for(int i=0;i<len1;i++)
{
nums[s1.charAt(i)-'a']++;
nums[s2.charAt(i)-'a']--;
}
boolean flag = Arrays.stream(nums).allMatch(x1 -> x1==0);
if(!flag) return false;
//s1和s2开始的len个字符是否相等
boolean[][][]dp = new boolean[len1+1][len1][len1];
//遍历所有字符串
for(int i=1;i<=len;i++)
{
//s1开始
for(int j=0;j+i<=len;j++)
{
//s2开始
for(int k=0;k+i<=len;k++)
//长度1无需切割
if(i==1)
dp[i][j][k] = s1.charAt(j) == s2.charAt(k);
else
{
//切割后左边部分的长度
for(int q=1;q<i;q++)
{
dp[i][j][k] = dp[q][j][k+i-q] && dp[i-q][j+q][k]
|| dp[q][j][k]&&dp[i-q][j+q][k+q];
//if是true就break
if(dp[i][j][k] == true)
break;
}
}
}
}
return dp[len][0][0];
}
}
87.扰乱字符串 scramble string
最新推荐文章于 2022-07-25 22:43:59 发布