0
点赞
收藏
分享

微信扫一扫

【力扣·重复的子字符串】Python解法

知年_7740 2022-03-11 阅读 83

思路:这道题其实很简单,但我还是用了很久,主要问题就是超时。

我最开始是遍历整个字符串长度然后每次增加一个字符长度截取,然后将两个字符串set成集合,当两个集合相等且原始字符串长度是子串的倍数且不为一倍且子串在原始字符串除子串外部分中时,若子串乘以n倍与原始相等,就将flag置为1。然后就超时了。

之后,我将遍历长度改为字符串长度一半,还是超时。

最后,我求出字符串首字母在[1:len(s)/2]中的数量num,然后循环num+2次(要加上首字母的一次和恰好中间之后一个就是的情况),接着每次循环中求出字符的位置,让子串增加相应的长度,这样耗时就大大减少了,也就通过啦!

原题如下:

 

通过代码如下:

class Solution(object):
    def repeatedSubstringPattern(self, s):
        """
        :type s: str
        :rtype: bool
        """
        flag = 0
        num =  s[1:len(s)/2].count(s[0])
        s1 = ""
        n = 0
        for i in range(num+1+1):
            k = s[1:].find(s[0])
            if k == -1:
                break
            n = len(s1) + s[n+1:].find(s[0]) + 1
            s1 = s[:n]
            ss = s[n:]
            s2 = set(s)
            s3 = set(s1)
            if len(s) == 1 or len(s2) == len(s):
                break
            a = len(s) % len(s1)
            b = len(s) / len(s1)
            if (s2 == s3) and (a == 0) and (b != 1) and (s1 in ss):
                s11 = s1 + ((b-1)*s1)
                if s == s11:
                    flag = 1
            if flag == 1:
                break
        if flag == 0:
            return False
        else:
            return True

 

举报

相关推荐

0 条评论