【second】Scramble String
三维DP。
重复子问题->DP
bool isScramble(string s1, string s2) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(s1.size()!=s2.size())
return false;
if(s1.empty())
return true;
int n = s1.size();
vector<vector<vector<bool>>> dp(n,vector<vector<bool>>(n,vector<bool>(n,false)));
int i,j,k,len;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
dp[i][j][0] = (s1[i]==s2[j]?true:false);
for(len=1;len<n;len++)
{
for(i=0;i<=n-len-1;i++)
{
for(j=0;j<=n-len-1;j++)
{
if(s1.substr(i,len+1)==s2.substr(j,len+1))
dp[i][j][len] = true;
else
{
for(k=1;k<len+1;k++)
{
if((dp[i][j][k-1]&&dp[i+k][j+k][len-k])||(dp[i][j+len-k+1][k-1]&&dp[i+k][j][len-k]))
{
dp[i][j][len] = true;
break;
}
}
}
}
}
}
return dp[0][0][n-1];
}
浙公网安备 33010602011771号