class Solution { public: bool isScramble(string s1, string s2) { // Start typing your C/C++ solution below // DO NOT write int main() function //f[len][i][j]表示长度为len的以s1[i]开头的字串和以s2[j]开头的字串是否互为scrambleString if (s1.size() != s2.size()) { return false; } for (size_t i = 0; i < s1.size(); ++i) { for (size_t j = 0; j < s2.size(); ++j) { f[1][i][j] = s1[i] == s2[j]; } } for (size_t len = 2; len <= s1.size(); ++len) { for (size_t s1beg = 0; s1beg < s1.size(); ++s1beg) { size_t s1end = s1beg + len - 1; if (s1end >= s1.size()) { break; } for (size_t s2beg = 0; s2beg < s2.size(); ++s2beg) { size_t s2end = s2beg + len - 1; if (s2end >= s2.size()) { break; } for (size_t s1mid = s1beg; s1mid < s1end; ++s1mid) { size_t leftSize = s1mid - s1beg + 1; size_t rightSize = len - leftSize; size_t s2mid = s2beg + leftSize - 1; bool res1 = f[leftSize][s1beg][s2beg] && f[rightSize][s1mid + 1][s2mid + 1]; s2mid = s2end -leftSize; bool res2 = f[leftSize][s1beg][s2mid + 1] && f[rightSize][s1mid + 1][s2beg]; f[len][s1beg][s2beg] = res1 || res2; if (f[len][s1beg][s2beg]) { break; } } } } } return f[s1.size()][0][0]; } private: bool f[100][100][100]; };
参考:http://www.cnblogs.com/remlostime/archive/2012/11/19/2778108.html
LeetCode-Scramble String
最新推荐文章于 2024-01-07 21:42:30 发布