0459-Repeated Substring Pattern(重复的子字符串)
這個系列算是出于個人興趣開的一個新坑吧,最近看到同學刷LeetCode算法題,就想寫寫那些可以一行Python代碼寫出來的題目,因此本專欄的文章的解題方式效率不做保證,只為追求“一行的浪漫”。
題目
題解
簡單解釋一下題目,給定一個非空的字符串,判斷它是否可以由它的一個子串重復多次構成。給定的字符串只含有小寫英文字母,并且長度不超過10000。本題難度為Easy。
這題的思路很多,可以用KMP算法解決,不過,這里官方題解給了一種有趣的思路,假設重復的子串為s′s\primes′,那么sss就可以寫成s′s′...s′s\prime s\prime ... s\primes′s′...s′,且每個子串s′s\primes′的長度為n′n\primen′,有1<=n′<n1<= n\prime < n1<=n′<n,其中nnn為sss的長度。因此,不妨將兩個sss拼接到一起,此時的從第一個和最后一個s′s\primes′中分別刪除第一個和最后一個字符,由于n′n\primen′至少為1,那么s+ss+ss+s中一定包含原始的sss。這里是一個充分條件,也就是sss滿足題意會有上述性質,至于有上述性質的一定滿足題意這一結論的證明見官方題解。
代碼
代碼實現上其實將兩個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(重复的子字符串)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux进程详细信息查看
- 下一篇: Pandas条件筛选 | Python技