您的位置:首页 > 其它

leetcode_087 Scramble String

2016-04-08 11:22 417 查看
题目分析:

给定连个字符串,判断它们能否通过二叉树的左右子树交换后相等,即判断字符串是否相似。

解题思路:

递归实现

两个字符串相似的必须条件是含有相等的字符集。故可以通过将两个字符串进行排序,然后利用递归方法进行判断。

实现程序

class Solution
{
public:
bool isScramble(string s1, string s2)
{
// 统计字符串s1和s2的长度
int l1 = s1.length();
int l2 = s2.length();
if (l1 != l2)
return false;
if (l1 == 1)
return s1 == s2;
// 对两个字符串进行排序,判断字符串中字符集是否相等
string st1 = s1;
string st2 = s2;
sort(st1.begin(), st1.end());
sort(st2.begin(), st2.end());
for (int i = 0; i < l1; i++)
{
if (st1[i] != st2[i])
return false;
}
string s11, s12, s21, s22;
bool res = false;
// 递归进行判断
for (int i = 1; i < l1 && !res; ++i)
{
s11 = s1.substr(0, i);
s12 = s1.substr(i, l1 - i);
s21 = s2.substr(0, i);
s22 = s2.substr(i, l1 - i);
// 递归进行判断
res = isScramble(s11, s21) && isScramble(s12, s22);
if (!res)
{
s21 = s2.substr(0, l1 - i);
s22 = s2.substr(l1 - i, i);
res = isScramble(s11, s22) && isScramble(s12, s21);
}
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode