题目描述
给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。
思路与算法
- 关键词:利用字符串的重复性质;字符串的拼接技巧;逆推法
- 假设原始字符串 s 是由某个子串 sub 重复多次构成的。也就是说,s 的形式是:
那么s+s去掉头尾后,必然还存在sub+sub+sub+…+sub(即s)的模式。s = sub + sub + sub + ... + sub
- 通过这个思路,我们可以得出结论:检查 s + s 去掉头尾后,如果还包含原始的 s,那么就说明 s 是由某个子串重复构成的。
代码
```class Solution:def repeatedSubstringPattern(self, s: str) -> bool:# 通过拼接字符串 s + sdoubled_s = s + s# 检查 s 是否出现在 doubled_s 中,但去掉头尾# 即检查 doubled_s[1:-1] 中是否包含 sreturn s in doubled_s[1:-1]```