【2022-09-29每日一题】面试题 01.09. 字符串轮转[Easy]

2022-09-29
1分钟阅读时长

2022-09-29每日一题:面试题 01.09. 字符串轮转

难度:Easy

标签:字符串 、 字符串匹配

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

示例1:

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

示例2:

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

    提示:

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

    说明:

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

    方法一:模拟

    详细思路过程见官方题解,这里只做个人刷题记录,方便后续查询阅读

    func isFlipedString(s1 string, s2 string) bool {
        n := len(s1)
        if n != len(s2) {
            return false
        }
        if n == 0 {
            return true
        }
    next:
        for i := 0; i < n; i++ {
            for j := 0; j < n; j++ {
                if s1[(i+j)%n] != s2[j] {
                    continue next
                }
            }
            return true
        }
    	return false
    }
    

    复杂度分析

    • 时间复杂度:O(n^2)

    • 空间复杂度:O(1)

    方法二:搜索子字符串

    func isFlipedString(s1 string, s2 string) bool {
        if len(s1) != len(s2) {
            return false
        }
        return strings.Contains(s1+s1, s2)
    }
    

    复杂度分析

    • 时间复杂度:O(n)

    • 空间复杂度:O(n)

    LeetCode题库地址