面试题 01.09. 字符串轮转

【LetMeFly】面试题 01.09.字符串轮转

力扣题目链接:https://leetcode.cn/problems/string-rotation-lcci/

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

示例1:

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

示例2:

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

提示:

  1. 字符串长度在[0, 100000]范围内。

说明:

  1. 你能只调用一次检查子串的方法吗?

方法一:倍增字符串

首先如果两个字符串不等长,那么直接返回false

否则就将一个字符串复制一份,abc变成abcabc,然后直接调用内置的find函数,查找第二个字符串是否是第一个字符串“倍增”后的子串

  • 时间复杂度$O(n)$,其中$n$是第一个字符串的长度。(KMP 算法搜索子字符串的时间复杂度为 $O(n)$)
  • 空间复杂度$O(n)$

AC代码

C++

1
2
3
4
5
6
7
8
class Solution {
public:
bool isFlipedString(string& s1, string& s2) {
if (s1.size() != s2.size())
return false;
return (s1 + s1).find(s2) != string::npos;
}
};

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/127104669


面试题 01.09. 字符串轮转
https://blog.letmefly.xyz/2022/09/29/LeetCode 面试题 01.09. 字符串轮转/
作者
Tisfy
发布于
2022年9月29日
许可协议