难度:困难。
标签:动态规划,字符串。
参考题解。
使用
d
p
[
i
]
[
j
]
[
l
e
n
]
dp[i][j][len]
dp[i][j][len] 表示从字符串
s
1
s_1
s1 中从
i
i
i开始长度为
l
e
n
len
len的字符串是否能变换为字符串
s
2
s_2
s2中从
j
j
j开始长度为
l
e
n
len
len的字符串。
转移方程:
动态规划永远的神,知道思想后,就能写出来代码了。
正确解法:
class Solution {
public:
bool isScramble(string s1, string s2) {
if(s1 == s2)return true;
int n = s1.length();
vector<vector<vector<int>>> dp(n, vector<vector<int>>(n, vector<int>(n + 1)));
for(int i = 0; i < n; ++i){
for(int j = 0; j < n; ++j){
if(s1[i] == s2[j])dp[i][j][1] = 1;
}
}
for(int step = 2; step <= n; ++step){
for(int i = 0; i <= n - step; ++i){
for(int j = 0; j <= n - step; ++j){
for(int k = 1; k < step; ++k){
if(dp[i][j][k] && dp[i + k][j + k][step - k]){
dp[i][j][step] = 1;
break;
}
if(dp[i][j + step - k][k] && dp[i + k][j][step - k]){
dp[i][j][step] = 1;
break;
}
}
}
}
}
return dp[0][0][n];
}
};
结果: