挑战介绍
实现一个算法来识别一个字符串 s2 是否是另一个字符串 s1 的旋转。旋转的解释如下:
如果将 s1 从某个位置断开,拆分成两个字符串(可能有一个为空字符串),再将这两个字符串调换顺序后拼接起来,能够得到 s2 ,那么说字符串 s2 是字符串 s1 的旋转。
本次挑战中,你需要在 rotation.py 文件中补充函数 is_substring 及函数 is_rotation 的空缺部分。
1is_substring 函数接受两个参数,s1,s2 用于指定传入的两个字符串; 2 3is_substring 函数由于判断传入的一个字符串是否是另一个的子字符串,它需要返回一个布尔值。 4 5is_rotation 函数接受两个参数,s1,s2 用于指定传入的两个字符串; 6 7is_rotation 函数需调用 is_substring 函数,但仅可调用一次; 8 9is_rotation 函数输出一个布尔值,即 True 或者 False。
你需要补充 is_substring 函数及 is_rotation 函数,使 is_rotation 函数可以识别传入的 s2 字符串是否是 s1 字符串的旋转。要求如下:
1如果 s2 字符串是 s1 字符串的旋转,则返回 True; 2如果 s2 字符串不是 s1 字符串的旋转,则返回 False; 3如果传入的字符串有一个是 None 或者空字符,但另外一个不是时,也返回 False。
1class Rotation(object): 2 3 def is_substring(self, s1, s2): 4 return s1 in s2 5 6 def is_rotation(self, s1, s2): 7 if s1 is None or s2 is None: 8 return False 9 if len(s1) != len(s2): 10 return False 11 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的子串
例如:
1s1 = helloworld 2s1 + s1 = helloworldhelloworld
即包含helloworld 也包含worldhello 结果一目了然
