📅  最后修改于: 2023-12-03 14:58:21.517000             🧑  作者: Mango
这是第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算法、哈希等多种算法来实现,但在本题中都不必要。