String Rotation:假设函数isSubString(str1, str2)
可以判断str2
是否是str1
的子串。给定两个字符串s1
和s2
,判断s1
循环左移后,是否可以得到s2
,例如,waterbottle
循环左移3
位后可以得到erbottlewat
。假如只调用一次isSubString()
可以实现吗?
当s1
循环移位后可以得到s2
时,本质上是将s1
一分为二,然后将前面一部分接到后面一部分的后面,例如s1 = xy
,则s2 = yx
。
因此最简单的办法就是在每一个可能的位置对s1
进行拆分,组合后再和s2
进行比较。通过观察可以发现,无论将s1
如何拆分,如果s2
是s1
的循环移位结果,则s2
一定是s1 + s1
的子串,例如s1 = xy
,则s1 + s1 = xyxy
,s2 = yx
。
class Solution {
public:
bool isFlipedString(string s1, string s2) {
if(s1.size() != s2.size()) return false;
string s1s1(s1 + s1);
string::size_type pos = s1s1.find(s2);
if(pos == string::npos) return false;
else return true;
}
};
注:是我太笨了还是咋,我觉得这道题技巧性太强了吧。