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

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
相关推荐
三万棵雪松5 分钟前
【AI小智后端部分(一)】
人工智能·python·ai小智
laplace01237 分钟前
Part 3:模型调用、记忆管理与工具调用流程(LangChain 1.0)笔记(Markdown)
开发语言·人工智能·笔记·python·langchain·prompt
winfredzhang16 分钟前
深度解析:利用 Python + Playwright 攻克动态网页 PPT 导出难题
python·powerpoint·截图·自动翻页
only-qi16 分钟前
leetcode2. 两数相加
算法·leetcode
鲨莎分不晴18 分钟前
拯救暗淡图像:深度解析直方图均衡化(原理、公式与计算)
人工智能·算法·机器学习
风送雨25 分钟前
八周Python强化计划(七)
开发语言·python
ππ很开心66628 分钟前
DAY 32 函数专题2:装饰器
开发语言·python
DuHz35 分钟前
242-267 GHz双基地超外差雷达系统:面向精密太赫兹传感与成像的65nm CMOS实现——论文阅读
论文阅读·物联网·算法·信息与通信·毫米波雷达
山沐与山42 分钟前
LangChain Tools解析:让Agent拥有超能力
人工智能·python·langchain
TonyLee01744 分钟前
python代码运行时间信息记录
python