public class Solution {
public boolean isScramble(String s1, String s2)
{
int n=s1.length();
boolean[][][] dp=new boolean[n][n][n+1];
for(int i=n-1; i>=0; i--)
for(int j=n-1; j>=0; j--)
for(int k=1; k<=n-Math.max(i,j);k++)
{
if(s1.substring(i,i+k).equals(s2.substring(j,j+k)))
dp[i][j][k]=true;
else
{
for(int l=1; l<k; l++)
{
if(dp[i][j][l] && dp[i+l][j+l][k-l] || dp[i][j+k-l][l] && dp[i+l][j][k-l])
{
dp[i][j][k]=true;
break;
}
}
}
}
return dp[0][0][n];
}
}
public boolean isScramble(String s1, String s2)
{
int n=s1.length();
boolean[][][] dp=new boolean[n][n][n+1];
for(int i=n-1; i>=0; i--)
for(int j=n-1; j>=0; j--)
for(int k=1; k<=n-Math.max(i,j);k++)
{
if(s1.substring(i,i+k).equals(s2.substring(j,j+k)))
dp[i][j][k]=true;
else
{
for(int l=1; l<k; l++)
{
if(dp[i][j][l] && dp[i+l][j+l][k-l] || dp[i][j+k-l][l] && dp[i+l][j][k-l])
{
dp[i][j][k]=true;
break;
}
}
}
}
return dp[0][0][n];
}
}
本文探讨了一种优化算法,用于快速判断两个字符串是否可以通过重新排列字符实现匹配,特别关注了递归和动态规划的应用。
375

被折叠的 条评论
为什么被折叠?



