目錄
1.題目描述
2.題目求解
方法一:枚舉
方法二:字符串匹配
方法三:另辟蹊徑
1.題目描述
給定一個(gè)非空的字符串?s
?,檢查是否可以通過由它的一個(gè)子串重復(fù)多次構(gòu)成。
示例 1:
輸入: s = "abab" 輸出: true 解釋: 可由子串 "ab" 重復(fù)兩次構(gòu)成。
示例 2:
輸入: s = "aba" 輸出: false
示例 3:
輸入: s = "abcabcabcabc" 輸出: true 解釋: 可由子串 "abc" 重復(fù)四次構(gòu)成。 (或子串 "abcabc" 重復(fù)兩次構(gòu)成。)
提示:
1 <= s.length <= 104
-
s
?由小寫英文字母組成
2.題目求解
先看一下官方給的兩種解法:
方法一:枚舉
代碼:
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
n = len(s)
for i in range(1, n // 2 + 1):
if n % i == 0:
if all(s[j] == s[j - i] for j in range(i, n)):
return True
return False
方法二:字符串匹配
代碼:
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
return (s + s).find(s, 1) != len(s)
最后再看一位老哥的方法,另辟蹊徑,真的nb!
方法三:另辟蹊徑
如果s不包含重復(fù)子串,那么s自己就是一次重復(fù)的子串,那么把s + s去頭去尾中就一定不包含s自己。文章來源:http://www.zghlxwxcb.cn/news/detail-790746.html
如果s包含重復(fù)子串,那么在s + s去頭去尾中就一定能找到s自己。文章來源地址http://www.zghlxwxcb.cn/news/detail-790746.html
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
return True if s in (s + s)[1:-1] else False
到了這里,關(guān)于重復(fù)的子字符串的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!