您的位置:首页 > 其它

87. Scramble String

2017-02-07 01:16 141 查看
一开始以为很难, 其实就是递归判断,只要第一次做错的原因是我以为分割点是中间,其实是每一个点都可以是分割点,想想2叉树就想懂的。

2刷应该就用dp吧, 这个也在手动刷一次!理解多一次

class Solution {
public:
bool isScramble(string s1, string s2) {
if(s1 == s2) return true;
if(s1.length() == 0) return true;
if(s1.length() != s2.length()) return false;
int mark[26];
int n = s1.length();

memset(mark, 0, sizeof(mark));

for(int i = 0; i < n; ++ i){
mark[s1[i] - 'a']++;
mark[s2[i] - 'a']--;
}

for(int i = 0; i < 26; ++ i)
if(mark[i] != 0)
return false;

for(int i = 1; i < n; ++ i){
if((isScramble(s1.substr(0, i), s2.substr(0, i)) && isScramble(s1.substr(i), s2.substr(i))) ||
(isScramble(s1.substr(0, i), s2.substr(s1.size()-i)) && isScramble(s1.substr(i), s2.substr(0, s1.size()-i)))
)
return true;
}

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