0%

面试题 01.09. 字符串轮转

面试题 01.09. 字符串轮转

题解中的大佬
1
2
3
4
5
6
class Solution {
public:
bool isFlipedString(string s1, string s2) {
return s1.size() == s2.size() && (s1 + s1).find(s2) != -1;
}
};

把旋转字符串前半部分补充成旋转前的,后半部分也补充成旋转前的。最后就变成了两个旋转前的拼起来,而旋转后的必然存在与其中。find表示未找到s2子串就返回-1。

普通正常方法(模拟)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
bool isFlipedString(string s1, string s2) {
if(s1.size() != s2.size())
return false;
if(s1.empty())
return s2.empty();
for(int i = 0; i < s2.size(); ++i)
{
if(s2[i] == s1[0])
{
int j = i + 1;
int k = 1;
while(k < s1.size() && s2[j % s2.size()] == s1[k]) {
++j;
++k;
}
if(k == s1.size())
return true;
}
}
return false;
}
};