[LeetCode]87. Scramble String
题目描述
思路
对于题目中描述的扰乱字符串,可能存在多个
递归解决
当前输入的两个字符串如果相等,即返回true
否则 对i从1到len-1
判断 s1(0,i) 与 s2(0,i)或则s2(len - i, len - 1)是否满足扰乱串的条件
s1(i,len - 1) 与 s2(i, len - 1)或则s2(0, len - i)是否满足
若均满足返回true
否则返回false
代码
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
bool isScramble(string s1, string s2) {
if (s1 == s2)
return true;
vector<int> count(26, 0);
for (int i = 0; i < s1.size(); ++i) {
count[s1[i] - 'a']++;
count[s2[i] - 'a']--;
}
for (int p : count) {
if (p != 0)
return false;
}
for (int i = 1; i < s1.size(); ++i) {
if (isScramble(s1.substr(0, i), s2.substr(0, i)) && isScramble(s1.substr(i), s2.substr(i)))
return true;
if (isScramble(s1.substr(0, i), s2.substr(s1.size() - i)) && isScramble(s1.substr(i), s2.substr(0, s1.size() - i)))
return true;
}
return false;
}
};
int main() {
Solution s;
cout << s.isScramble("ab", "ba") << endl;
system("pause");
return 0;
}