0459-Repeated Substring Pattern

Posted 周先森爱吃素

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0459-Repeated Substring Pattern相关的知识,希望对你有一定的参考价值。

这个系列算是出于个人兴趣开的一个新坑吧,最近看到同学刷LeetCode算法题,就想写写那些可以一行Python代码写出来的题目,因此本专栏的文章的解题方式效率不做保证,只为追求“一行的浪漫”。

题目

题解

简单解释一下题目,给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。本题难度为Easy。

这题的思路很多,可以用KMP算法解决,不过,这里官方题解给了一种有趣的思路,假设重复的子串为 s ′ s\\prime s,那么 s s s就可以写成 s ′ s ′ . . . s ′ s\\prime s\\prime ... s\\prime ss...s,且每个子串 s ′ s\\prime s的长度为 n ′ n\\prime n,有 1 < = n ′ < n 1<= n\\prime < n 1<=n<n,其中 n n n s s s的长度。因此,不妨将两个 s s s拼接到一起,此时的从第一个和最后一个 s ′ s\\prime s中分别删除第一个和最后一个字符,由于 n ′ n\\prime n至少为1,那么 s + s s+s s+s中一定包含原始的 s s s。这里是一个充分条件,也就是 s s s满足题意会有上述性质,至于有上述性质的一定满足题意这一结论的证明见官方题解

代码

代码实现上其实将两个s拼接到一起并从位置1开始查询,只要查询的结果不是n就实现了从ss[1:len(ss)]的子串搜索。

class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        return (s + s).find(s, 1) != len(s)

提交的反馈如下。

以上是关于0459-Repeated Substring Pattern的主要内容,如果未能解决你的问题,请参考以下文章

spoj LCS2 - Longest Common Substring II && LCS - Longest Common Substring

LeetCode 5.Longest Palindromic Substring

Substring Anagrams

[Lintcode] Substring Anagrams

LeetCode 3. Longest Substring Without Repeating

atcoder abc158 E - Divisible Substring