📜  门|门 IT 2008 |第 61 题(1)

📅  最后修改于: 2023-12-03 15:28:48.557000             🧑  作者: Mango

门|门 IT 2008 | 第61题 题解

题目描述

给定两个字符串s1和s2,判断s2是否是s1的循环左移之后得到的字符串。

比如:"AABCD"是"BCDAA"的一个循环左移。

思路分析

对于两个字符串$s1$和$s2$,如果$s2$是$s1$的循环左移,那么$s2$一定可以表示成$s1$的两个部分拼接而成,即 $s2 = xy$,并且 $yx$ 一定是 $s1s1$ 的子串,即 $yx \in s1s1$。

因此,我们只需要判断 $s2$ 是否为 $s1s1$ 的子串即可。

代码实现
def is_rotation(s1: str, s2: str) -> bool:
    if len(s1) != len(s2):
        return False
    
    return s2 in (s1 + s1)
测试样例
assert is_rotation("AABCD", "BCDAA") == True
assert is_rotation("abcdefg", "fgabcde") == True
assert is_rotation("abcde", "adcbe") == False