跳到主要内容

面试题01.09.字符串轮转

链接:面试题01.09.字符串轮转
难度:Easy
标签:字符串、字符串匹配
简介:字符串轮转。给定两个字符串 s1 和 s2,请编写代码检查 s2 是否为 s1 旋转而成。

题解 1 - cpp

  • 编辑时间:2022-09-29
  • 执行用时:4ms
  • 内存消耗:7.5MB
  • 编程语言:cpp
  • 解法介绍:遍历。
class Solution {
public:
int n;
bool isFlipedString(string s1, string s2) {
if (s1.size() != s2.size()) return false;
n = s1.size();
if (n == 0) return true;
vector<int> list;
char start = s2[0];
for (int i = 0; i < n; i++) if (s1[i] == start) list.push_back(i);
for (auto &start : list) if (comp(s1, start, s2, 0)) return true;
return false;
}
bool comp(string &s1, int i1, string &s2, int i2) {
while (i2 < n) {
if (s1[i1] != s2[i2]) return false;
i1 = (i1 + 1) % n;
i2++;
}
return true;
}
};

题解 2 - cpp

  • 编辑时间:2022-09-29
  • 执行用时:4ms
  • 内存消耗:7.7MB
  • 编程语言:cpp
  • 解法介绍:拼接两个 s1,如果是旋转,s2 一定是子串。
class Solution {
public:
bool isFlipedString(string s1, string s2) {
return s1.size() == s2.size() && (s1 + s1).find(s2) != string::npos;
}
};