力扣刷题-字符串-(※)重复的子字符串

459.重复的子字符串

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。

示例 1:

输入: "abab"

输出: True

解释: 可由子字符串 "ab" 重复两次构成。

示例 2:

输入: "aba"

输出: False

示例 3:

输入: "abcabcabcabc"

输出: True

解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)

思路

https://www.programmercarl.com/0459.重复的子字符串.html#思路

具体的思路可以看代码随想录,讲解的很清晰。(暴力法、移动匹配法、KMP法

暴力法

python 复制代码
# 解法一:暴力法
class Solution(object):
    def repeatedSubstringPattern(self, s):
        """
        :type s: str
        :rtype: bool
        """
        n = len(s)
        if n <= 1:
            return False # 因为题目说的是由一个子串重复多次构成
        substr = ""
        for i in range(1, n//2+1): # 因为重复子串构成的前后半部分肯定一样
            if n % i == 0:
                substr = s[:i]
                if substr * (n//i) == s:
                    return True
        return False

KMP法

python 复制代码
# 解法二:KMP法
class Solution(object):
    def repeatedSubstringPattern(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if len(s) == 0:
            return False
        next = [0]*len(s) # 对next数组初始化
        self.getNext(next, s)
        # 需要判断 next数组最后一个元素是否是-1
        if next[len(s)-1] != -1 and len(s) % (len(s) - (next[len(s)-1]+1)) == 0:
            return True
        return False
    
    def getNext(self, next, s):
        # 求next数组
        j = -1
        next[0] = -1
        for i in range(1, len(s)):
            while j >=0 and s[i] != s[j+1]:
                j = next[j]
            if s[i] == s[j+1]:
                j += 1
            next[i] = j
相关推荐
皮蛋sol周1 分钟前
嵌入式学习C语言(八)二维数组及排序算法
c语言·学习·算法·排序算法
李昊哲小课18 分钟前
销售数据可视化分析项目
python·信息可视化·数据分析·matplotlib·数据可视化·seaborn
森焱森25 分钟前
单片机中 main() 函数无 while 循环的后果及应对策略
c语言·单片机·算法·架构·无人机
学不动CV了25 分钟前
ARM单片机OTA解析(二)
arm开发·数据结构·stm32·单片机·嵌入式硬件
烛阴28 分钟前
带参数的Python装饰器原来这么简单,5分钟彻底掌握!
前端·python
kk在加油41 分钟前
Redis基础数据结构
数据结构·数据库·redis
平和男人杨争争42 分钟前
机器学习12——支持向量机中
算法·机器学习·支持向量机
全干engineer1 小时前
Flask 入门教程:用 Python 快速搭建你的第一个 Web 应用
后端·python·flask·web
10岁的博客1 小时前
代码编程:一场思维与创造力的革命
开发语言·算法
nightunderblackcat1 小时前
新手向:Python网络编程,搭建简易HTTP服务器
网络·python·http