挑战介绍
实现一个算法来识别一个字符串 s2 是否是另一个字符串 s1 的旋转。旋转的解释如下:
如果将 s1 从某个位置断开,拆分成两个字符串(可能有一个为空字符串),再将这两个字符串调换顺序后拼接起来,能够得到 s2 ,那么说字符串 s2 是字符串 s1 的旋转。
本次挑战中,你需要在 rotation.py 文件中补充函数 is_substring 及函数 is_rotation 的空缺部分。
is_substring 函数接受两个参数,s1,s2 用于指定传入的两个字符串;
is_substring 函数由于判断传入的一个字符串是否是另一个的子字符串,它需要返回一个布尔值。
is_rotation 函数接受两个参数,s1,s2 用于指定传入的两个字符串;
is_rotation 函数需调用 is_substring 函数,但仅可调用一次;
is_rotation 函数输出一个布尔值,即 True 或者 False。
你需要补充 is_substring 函数及 is_rotation 函数,使 is_rotation 函数可以识别传入的 s2 字符串是否是 s1 字符串的旋转。要求如下:
如果 s2 字符串是 s1 字符串的旋转,则返回 True;
如果 s2 字符串不是 s1 字符串的旋转,则返回 False;
如果传入的字符串有一个是 None 或者空字符,但另外一个不是时,也返回 False。
class Rotation(object):
def is_substring(self, s1, s2):
return s1 in s2
def is_rotation(self, s1, s2):
if s1 is None or s2 is None:
return False
if len(s1) != len(s2):
return False
return self.is_substring(s1, s2 + s2)
第一个函数判断子串通过 python 中的 in 通过in判断是否包含来判断子集 具体参考:python in 与 not in 用法及运算符
第二个函数需要判断s1和s2的旋转对称关系 先一个len()对比如果长度不同肯定不存在旋转关系直接返回False即可 最后通过调用第一个is_substring()函数 通过判断s1是否是s2+s2的子集来判断是否旋转 因为s2+s2则包含了s2的所有旋转字符串,等效于判断s1是否是s2+s2的子串
例如:
s1 = helloworld
s1 + s1 = helloworldhelloworld
即包含helloworld 也包含worldhello 结果一目了然