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;
}
};
注:是我太笨了还是咋,我觉得这道题技巧性太强了吧。
本文介绍了一种判断两字符串s1和s2是否通过循环移位相等的方法。关键在于理解s2为s1+s1的子串特性,通过一次查找即可完成判断,避免了多次拆分与比较。

被折叠的 条评论
为什么被折叠?



