题目简介:
字符串轮转。给定两个字符串s1
和s2
,请编写代码检查s2
是否为s1
旋转而成(比如,waterbottle
是erbottlewat
旋转后的字符串)。
示例1:
1 2
| 输入:s1 = "waterbottle", s2 = "erbottlewat" 输出:True
|
示例2:
1 2
| 输入:s1 = "aa", s2 = "aba" 输出:False
|
提示:
- 字符串长度在[0, 100000]范围内。
思路:
方法一:模拟每一个s1
的切割点,并组合起来观察是否与s2
相等
方法二:先将两个s1
相加,那么就能模拟出所有的旋转情况,因此只需观察是否能在其中找到s2
即可。
代码如下:
方法一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution { public: bool isFlipedString(string s1, string s2) {
if(s1.size() != s2.size()) return false;
if(s1 == "" && s2 == "") return true;
for(int i = 0; i < s1.size(); i++){
string pre = s1.substr(0, i); string next = s1.substr(i, s1.size() - i);
if(next + pre == s2) return true; }
return false; } };
|
方法二:
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Solution { public: bool isFlipedString(string s1, string s2) {
if(s1.size() != s2.size()) return false;
if((s1 + s1).find(s2) != string::npos) return true;
return false; } };
|