1227. 重复的子串模式

1227. 重复的子串模式

中文English

给你一个非空字符串,判断它能否通过重复它的某一个子串若干次(两次及以上)得到。字符串由小写字母组成,并且它的长度不会超过10000。

样例

样例1:

输入:"abab"

输出:True

说明:可以由它的子串"ab"重复两次得到。

样例2:

输入:"aba"

输出:False

样例3:

输入:"abcabcabcabc"

输出:True

说明:可以由它的子串"abc"重复四次得到(同时也可以是"abcabc"重复两次)。
class Solution:
    """
    @param s: a string
    @return: return a boolean
    """
    '''
    大致思路:
    1.初始化值a = s[:len(s)//2],while true,内层循环i=2,if i*a == s,返回True,否则返回False
    '''
    def repeatedSubstringPattern(self,s):
        a,l = s[:len(s)//2],len(s[:len(s)//2])+1
    
        while True:
            a = a[:l]
            if len(a) == 0:
                return False
            
            time = len(s)//len(a)
            if time >= 2:
                for i in range(1,time+1):
                    if i*a == s:
                        return True
            l = l-1
        return False
第二种方式:O(n)时间复杂度:

class Solution:
    '''
    大致思路:
    1.while True,初始化l = len(s)//2,如果len(s) % l == 0,a=s[:l],l -= 1判断(len(s) // l *a) * a == s,返回true,最终l如果等于0的话,则返回False
    '''
    def  repeatedSubstringPattern(self,s):
        l = len(s)//2 
        while True:
            if l == 0:
                return False
            a = s[:l]
            if len(s) % l == 0:
                b = len(s) // l
                if b*a == s:
                    return True
            l -= 1
 
posted @ 2020-04-19 15:30  风不再来  阅读(195)  评论(0编辑  收藏  举报