您的位置:首页 > 其它

87. Scramble String

2016-07-27 10:44 253 查看
class Solution {
public:
bool isScramble(string s1, string s2) {
if(s1==s2)
return true;
if(s1.size()!=s2.size())return false;
map<char,int> count;
for(int i=0;i<s1.size();i++)
{
count[s1[i]]++;
count[s2[i]]--;
}
for(map<char,int>::iterator it=count.begin();it!=count.end();it++)
if(it->second!=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(s2.size()-i))&&isScramble(s1.substr(i),s2.substr(0,s2.size()-i)))
return true;
}
return false;
}


增加cache 用来记忆s1和s2是否scramble

class Solution {
private:
map<string,bool> cache;
public:
bool isScramble(string s1, string s2) {
if(s1==s2)
return true;
if(cache.count(s1+s2))return cache[s1+s2];//在cache中查找是否已经存储了s1和s2的情况
if(s1.size()!=s2.size())return false;
map<char,int> count;
for(int i=0;i<s1.size();i++)
{
count[s1[i]]++;
count[s2[i]]--;
}
for(map<char,int>::iterator it=count.begin();it!=count.end();it++)
if(it->second!=0)
{
cache[s1+s2]=false;
return false;
}
for(int i=1;i<s1.size()&&!cache[s1+s2];i++)
{
if(isScramble(s1.substr(0,i),s2.substr(0,i))&&isScramble(s1.substr(i),s2.substr(i)))
{
cache[s1+s2]=true;
return true;
}
if(isScramble(s1.substr(0,i),s2.substr(s2.size()-i))&&isScramble(s1.substr(i),s2.substr(0,s2.size()-i)))
{
cache[s1+s2]=true;
return true;
}
}
cache[s1+s2]=false;
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: