0459-Repeated Substring Pattern(重复的子字符串)
這個(gè)系列算是出于個(gè)人興趣開的一個(gè)新坑吧,最近看到同學(xué)刷LeetCode算法題,就想寫寫那些可以一行Python代碼寫出來的題目,因此本專欄的文章的解題方式效率不做保證,只為追求“一行的浪漫”。
題目
題解
簡(jiǎn)單解釋一下題目,給定一個(gè)非空的字符串,判斷它是否可以由它的一個(gè)子串重復(fù)多次構(gòu)成。給定的字符串只含有小寫英文字母,并且長(zhǎng)度不超過10000。本題難度為Easy。
這題的思路很多,可以用KMP算法解決,不過,這里官方題解給了一種有趣的思路,假設(shè)重復(fù)的子串為s′s\primes′,那么sss就可以寫成s′s′...s′s\prime s\prime ... s\primes′s′...s′,且每個(gè)子串s′s\primes′的長(zhǎng)度為n′n\primen′,有1<=n′<n1<= n\prime < n1<=n′<n,其中nnn為sss的長(zhǎng)度。因此,不妨將兩個(gè)sss拼接到一起,此時(shí)的從第一個(gè)和最后一個(gè)s′s\primes′中分別刪除第一個(gè)和最后一個(gè)字符,由于n′n\primen′至少為1,那么s+ss+ss+s中一定包含原始的sss。這里是一個(gè)充分條件,也就是sss滿足題意會(huì)有上述性質(zhì),至于有上述性質(zhì)的一定滿足題意這一結(jié)論的證明見官方題解。
代碼
代碼實(shí)現(xiàn)上其實(shí)將兩個(gè)s拼接到一起并從位置1開始查詢,只要查詢的結(jié)果不是n就實(shí)現(xiàn)了從ss[1:len(ss)]的子串搜索。
class Solution:def repeatedSubstringPattern(self, s: str) -> bool:return (s + s).find(s, 1) != len(s)提交的反饋如下。
總結(jié)
以上是生活随笔為你收集整理的0459-Repeated Substring Pattern(重复的子字符串)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux进程详细信息查看
- 下一篇: 0100-Same Tree(相同的树)