459. 重复的子字符串
题解:
- 首先,我们需要找到字符串s的所有子串。
- 然后,我们需要检查这些子串是否可以通过重复多次构成原字符串s。
- 如果找到了这样的子串,返回True,否则返回False。
class Solution:def repeatedSubstringPattern(self, s: str) -> bool:i = 1while i < len(s)//2 + 1:if len(s) % i == 0:if s[:i] * (len(s) // i) == s:return Truei += 1return False
还可以利用一种巧妙的方法:将字符串 s
与自身拼接,然后去掉新字符串首尾各一个字符,接着在这个新构造的字符串中查找原字符串 s
。如果 s
在新字符串中的位置不是起始位置(即位置不为 0),那么原字符串 s
可以由它的一个子串重复多次构成。
这个方法的原理是,如果字符串 s
可以由它的一个子串重复构成,那么在将 s
与自身拼接并去掉首尾字符后,原字符串 s
必然能在这个新字符串中找到,而且不会出现在起始位置。
class Solution:def repeatedSubstringPattern(self, s: str) -> bool:tmp = (s + s)[1:-1]return s in tmp