学习还是要灵活些,两种方法,巧妙与粗暴的对比
暴力解法
思路:一个一个挨着拼出来比,遇到合适的return true
,到最后都没有,就return false
class Solution {
public:
bool solve(string A, string B) {
// write code here
if(A == B) return true; //A,B 一样,直接return
int al = A.length(), bl = B.length(), i, j;
if(al != bl) return false;
for(i=1; i<al; i++){
string tmp;
for(j=i; j<al; j++) tmp+=A[j];
for(j=0; j<i; j++) tmp+=A[j];
if(tmp == B) return true;
}
return false;
}
};
巧妙的办法
思路:如果A分割开转换位置可以拼成B,那么如果两个A直接合并,一定中间有个B。
eg:
A=“qwerty”, B="rtyqwe"
, 这两个字符串很明显A是可以通过分割转换得到B的
我们如果直接将两个A合起来,即(A+=A),就可以得到一个这样的字符串 “qwertyqwerty”
可以看到两个A合并后,中间正好是B
class Solution {
public:
bool solve(string A, string B) {
// write code here
int len1 = A.size(), len2 = B.size();
if (len1 != len2) {
return false;
}
A += A;
if (A.find(B) != A.npos) {
return true;
}
return false;
}
};