Python 中检查字符串是否为另一个字符串的旋转字符串(rotation)
旋转字符串是指将原始字符串的一部分取出并移到字符串末尾形成新的字符串的操作。例如,“abcdefg” 可以通过将其前3个字符“abc”移到字符串末尾,得到新字符串“defgabc”。而将其前6个字符 “abcdef”移到字符串末尾得到“gabcdef”。
在 Python 中,我们可以通过几种方法来检查一个字符串是否是另一个字符串的旋转字符串,下面我们将介绍其中的两种常用方法。
方法一:直接判断
我们可以将原字符串重复一遍,然后判断目标字符串是否是原字符串的子字符串。如代码所示:
def is_rotation(s1: str, s2: str) -> bool:
if len(s1) != len(s2):
return False
new_s1 = s1 + s1
if s2 in new_s1:
return True
else:
return False
在这段代码中,我们首先判断 s1 和 s2 的长度是否相等,不相等则直接返回 False。之后将 s1 重复一遍并保存到 new_s1 变量中,然后判断 s2 是否是 new_s1 的子字符串,如果是则说明 s2 是 s1 的旋转字符串,返回 True;否则,返回 False。
执行以下代码进行测试:
print(is_rotation('abcdefg', 'defgabc')) # True
print(is_rotation('abcdefg', 'cdefgab')) # False
方法二:使用集合
我们可以先判断两个字符串是否长度相等,如果长度不相等,则 s2 必定不是 s1 的旋转字符串;如果长度相等,则将 s1 中的每个字符添加到一个集合中,然后遍历 s2 的每个字符,判断该字符是否在集合中。如果有任何一个字符不在集合中,则说明 s2 不是 s1 的旋转字符串。如代码所示:
def is_rotation(s1: str, s2: str) -> bool:
if len(s1) != len(s2):
return False
s = set(s1)
for x in s2:
if x not in s:
return False
return True
执行以下代码进行测试:
print(is_rotation('abcdefg', 'defgabc')) # True
print(is_rotation('abcdefg', 'cdefgab')) # False
结论
本文介绍了两种常用的方法来检查一个字符串是否是另一个字符串的旋转字符串,这对于字符串处理是非常实用的。在实际应用中,我们可以根据输入数据的性质和运行环境的限制选择最合适的方法。