📌  相关文章
📜  国际空间研究组织 | ISRO CS 2016 |问题 26(1)

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

国际空间研究组织 | ISRO CS 2016 | 问题 26

这道问题是 ISRO CS 2016 面试题的第 26 题,考察的是编程和算法方面的知识。问题描述如下:

给定两个字符串,判断它们是否是旋转字符串。旋转字符串是指,将一个字符串的任意一部分移到末尾形成的新字符串,例如 "abcde" 旋转一次可以得到 "bcdea"、"cdeab" 和 "deabc" 等等。

这个问题可以使用字符串匹配算法来解决。可以将两个字符串拼接在一起,然后在这个新字符串中查找是否包含原来的两个字符串。如果找到了,说明这个字符串是由原来的两个字符串旋转得到的。

示例代码如下:

def is_rotation(s1: str, s2: str) -> bool:
    """
    判断两个字符串是否是旋转字符串
    """
    if len(s1) != len(s2):
        return False

    # 将 s1 与 s2 拼接在一起
    s = s1 + s1

    # 在拼接后的字符串中查找 s2
    if s.find(s2) >= 0:
        return True
    
    return False

这个函数的时间复杂度为 O(n),其中 n 是两个字符串的长度之和。因为这个函数只进行一次字符串查找操作,所以时间复杂度不会太高。

可以使用下面的代码进行测试:

assert is_rotation("abcde", "cdeab") == True
assert is_rotation("abcde", "abcde") == True
assert is_rotation("abcde", "abced") == False