您的位置:首页 > 其它

***Leetcode 87. Scramble String

2017-12-20 16:35 453 查看
参考后, 没做出来

class Solution {
public:
bool isScramble(string s1, string s2) {
vector<int> v(127);
size_t n = s1.size();
if (n == 1) return s1[0] == s2[0];

for (size_t i = 0; i != n; ++i) {
++v[s1[i]];
--v[s2[i]];
}

for (size_t i = 0; i != n; ++i) {
if (v[s1[i]] != 0) return false;
}

for (size_t i = 1; i != n; ++i) {

if (isScramble(s1.substr(0, i), s2.substr(0, i)) && isScramble(s1.substr(i, n - i), s2.substr(i, n - i)))
return true;
if (isScramble(s1.substr(0, i), s2.substr(n - i, i)) && isScramble(s1.substr(i, n - i), s2.substr(0, n - i)))
return true;
}
return false;
}
};


class Solution {
public:
bool isScramble(string s1, string s2) {

size_t n = s1.size();
if (n != s2.size()) return false;

vector<vector<vector<int> > >  flag(n, vector<vector<int> >(n, vector<int>(n + 1)));

for (size_t i = 0; i != n; ++i) {
for (size_t j = 0; j != n; ++j) {
if (s1[i] == s2[j]) flag[i][j][1] = 1;
}
}

for (size_t len = 2; len <= n; ++len) {
for (size_t i = 0; i != n; ++i){
for (size_t j = 0; j != n; ++j) {
if (max(j, i) + len <= n) {
for (size_t k = 1; k != len; ++k) {

flag[i][j][len] = flag[i][j][len] || (flag[i][j + len - k][k] && flag[i + k][j][len - k]);
flag[i][j][len] = flag[i][j][len] || (flag[i][j][k] && flag[i + k][j + k][len - k]);
}
}

}
}
}
return flag[0][0]
;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: