📜  门| GATE CS 2021 |设置 1 |第 40 题(1)

📅  最后修改于: 2023-12-03 14:58:21.517000             🧑  作者: Mango

GATE CS 2021 设置1 第40题

这是第40题,属于GATE CS 2021考试的第一份设置。本题考察对时间复杂度和空间复杂度的理解,并需要编写代码。

题目描述

给定两个字符串s1和s2,编写一个函数来确定s2是否是s1的旋转。例如,如果s1='abcd',则s2='cdab'是s1的旋转,而s2='abdc'不是。

输入格式

两个字符串s1和s2

输出格式

如果s2是s1的旋转,则返回True;否则返回False。

样例

输入:

s1 = 'abcd'

s2 = 'cdab'

输出:

True

思路

我们可以将s1拼接成s1s1,那么s2一定是s1s1的一个子串。如果s2是s1的旋转,那么s2必定可以由s1旋转得到,因此s1s1中必定包含了s2,我们只需要判断s2是否为s1s1的子串即可。

时间复杂度:O(n),其中n为s1的长度。

空间复杂度:O(n),需要将s1复制一遍。

代码
def is_rotation(s1, s2):
    if len(s1) != len(s2):
        return False
    if s2 in (s1+s1):
        return True
    return False
总结

本题主要考察了程序员的时间复杂度和空间复杂度的理解。需要注意的是,判断字符串是否为另一字符串的子串是一个经典问题,可以使用KMP算法、哈希等多种算法来实现,但在本题中都不必要。