您的位置:首页 > 其它

leetcode - Scramble String

2013-12-06 11:13 351 查看
class Solution {
public:
bool isScramble(string &s1, string &s2, int start1, int end1, int start2, int end2){
if (end1-start1 != end2-start2)
return false;
if (end1-start1 < 0)
return true;
int len = end1-start1+1;
if (len==1){
if (s1.at(start1) == s2.at(start2))
return true;
return false;
}
int *f = new int [128];
int *g = new int [128];
for (int i=0; i<128; i++){
f[i] = 0;
g[i] = 0;
}
int * flag = new int[len];
int tDifs = 0;
int rDifs = 0;
for (int i=0; i<len; i++){
int p = (int)s1.at(i+start1);
f[p]++;
if (f[p]==1)
tDifs++;
else if (f[p]==0)
tDifs--;
int q = (int)s2.at(i+start2);
f[q]--;
if (f[q]==-1)
tDifs++;
else if (f[q]==0)
tDifs--;
int r = (int)s2.at(end2-i);
g[p]++;
if (g[p]==1)
rDifs++;
else if (g[p]==0)
rDifs--;
g[r]--;
if (g[r]==-1)
rDifs++;
else if (g[r]==0)
rDifs--;
flag[i] = 0;
if (tDifs==0)
flag[i]+=1;
else if (rDifs==0)
flag[i]+=2;
}
int rlt = 0;
if (tDifs!=0)
rlt = -1;
for (int i=0; i<len-1 && rlt==0; i++){
if (flag[i]%2==1 && isScramble(s1,s2,start1, start1+i, start2,start2+i) && isScramble(s1,s2,start1+i+1,end1,start2+i+1, end2)){
rlt =1;
break;
}
if (flag[i]/2==1 && isScramble(s1,s2,start1, start1+i, end2-i,end2) && isScramble(s1,s2,start1+i+1,end1,start2, end2-i-1)){
rlt =1;
break;
}
}
delete []f;
delete[]g;
delete[]flag;
if (rlt==1)
return true;
return false;
}
bool isScramble(string s1, string s2) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
return isScramble(s1,s2,0,s1.length()-1, 0, s2.length()-1);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: