459. 重復子字符串(Python)

題目

難度:★☆☆☆☆
類型:數(shù)組

給定一個非空的字符串,判斷它是否可以由它的一個子串重復多次構成。給定的字符串只含有小寫英文字母,并且長度不超過10000。

示例

示例 1:
輸入: "abab"
輸出: True
解釋: 可由子字符串 "ab" 重復兩次構成。

示例 2:
輸入: "aba"
輸出: False

示例 3:
輸入: "abcabcabcabc"
輸出: True
解釋: 可由子字符串 "abc" 重復四次構成。 (或者子字符串 "abcabc" 重復兩次構成。)

解答

這里我們觀察到一個現(xiàn)象,對于一個字符串s,我們將兩個該字符串連接成一個更長的字符串(s_double),該字符串中至少包含兩個s子串,如果s可以由多個重復單元構成,那么合并后的字符串中一定包含超過兩個s子串(可重疊),例如,兩個"abab"組成的"abababab"中包含3個"abab",而兩個"aba"組成的"abaaba"則只包含兩個"aba",根據(jù)這個原理,我們只需要統(tǒng)計s+s中s(可重疊)出現(xiàn)的次數(shù),并與2比較即可。

這里為了簡化計算,我們把s+s的首尾兩端字符去掉,這樣就只需要查看s是否在剩余的字符串中即可。編碼時通過索引范圍[1:len(s)*2-1]起到去掉首尾兩端字符的效果。

class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        return s in (s+s)[1:len(s)*2-1]

如有疑問或建議,歡迎評論區(qū)留言~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 題目描述 給定一個非空的字符串,判斷它是否可以由它的一個子串重復多次構成。給定的字符串只含有小寫英文字母,并且長度...
    zhipingChen閱讀 674評論 0 2
  • 字符串匹配KMP算法詳解 1. 引言 以前看過很多次KMP算法,一直覺得很有用,但都沒有搞明白,一方面是網(wǎng)上很少有...
    張晨輝Allen閱讀 2,644評論 0 3
  • 內容 給定一個非空的字符串,判斷它是否可以由它的一個子串重復多次構成。給定的字符串只含有小寫英文字母,并且長度不超...
    吃飯用盤裝閱讀 920評論 0 0
  • 數(shù)據(jù)結構與算法--KMP算法查找子字符串 部分內容和圖片來自這三篇文章: 這篇文章、這篇文章、還有這篇他們寫得非常...
    sunhaiyu閱讀 1,881評論 1 21
  • 簡介 Mojo::UserAgent 是一個全功能的非阻塞 I/O HTTP 和 WebSocket 的用戶代理,...
    JSON_NULL閱讀 1,255評論 0 0

友情鏈接更多精彩內容