Keshawn_lu's Blog

Leetcode 面试题 01.09. 字符串轮转

字数统计: 261阅读时长: 1 min
2022/09/29 Share

题目简介:

字符串轮转。给定两个字符串s1s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottleerbottlewat旋转后的字符串)。

示例1:

1
2
输入:s1 = "waterbottle", s2 = "erbottlewat"
输出:True

示例2:

1
2
输入:s1 = "aa", s2 = "aba"
输出:False

提示:

  1. 字符串长度在[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;
}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: