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