在列表中查找子字符串

时间:2018-04-23 20:04:40

标签: python

我正在通过观察并尝试解决面试问题来学习python。

提供以下问题和解决方案。

给定非空字符串检查是否可以通过获取它的子字符串并将子字符串的多个副本附加在一起来构造它。您可以假设给定的字符串仅由小写英文字母组成,其长度不超过10000。

示例1:

输入:“abab”

输出:True

说明:它是子串“ab”两次。

示例2:

输入:“aba”

输出:错误

def repeatedSubstringPattern2(self, str):
        """
        :type str: str
        :rtype: bool
        """
        if not str:
            return False

        ss = (str + str)[1:-1]
        print ss
        return ss.find(str) != -1

我的问题是即使aba被列为一个假的例子,但是看一下这个解决方案它让我觉得它是真的。任何的想法??我缺少什么?

  ss = (aba +aba)[1:-1] --> abaaba[1:-1] --> baaba 
  baaba.find(aba) != -1 --> true??

1 个答案:

答案 0 :(得分:2)

您在此行中使用的逻辑:

ss = (aba +aba)[1:-1] --> abaaba[1:-1] --> baaba 

不正确。切片列表时,它不包括第二个切片索引处的元素。正确的逻辑是:

ss = (aba +aba)[1:-1] --> abaaba[1:-1] --> baab