码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 力扣刷题-字符串-(※)重复的子字符串


    459.重复的子字符串

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
    示例 1:
    输入: “abab”
    输出: True
    解释: 可由子字符串 “ab” 重复两次构成。
    示例 2:
    输入: “aba”
    输出: False
    示例 3:
    输入: “abcabcabcabc”
    输出: True
    解释: 可由子字符串 “abc” 重复四次构成。 (或者子字符串 “abcabc” 重复两次构成。)

    思路

    https://www.programmercarl.com/0459.%E9%87%8D%E5%A4%8D%E7%9A%84%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.html#%E6%80%9D%E8%B7%AF
    具体的思路可以看代码随想录,讲解的很清晰。(暴力法、移动匹配法、KMP法)

    暴力法

    # 解法一:暴力法
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    KMP法

    # 解法二: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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    【CV】第 13 章:用于处理图像的高级 GAN
    LeetCode50天刷题计划(Day 26— 字母异位词分组(11.30-12.20)
    STM32cubeIDE 更改Repository folder
    17. 最小化可变性
    vim 窗口管理
    一幅长文细学HTML5和CSS3——一幅长文系列
    简单三招,就能将ppt翻译成英文,快来学习
    Unity 导航寻路快速上手
    mybatis数据批量更新
    Android7.1 新增开机广播过滤(只有特定apk可以接收开机广播)
  • 原文地址:https://blog.csdn.net/hxhabcd123/article/details/133848836
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号