【LeetCode459】重复的子字符串

题目描述

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

思路与算法

  • 关键词:利用字符串的重复性质;字符串的拼接技巧;逆推法
  • 假设原始字符串 s 是由某个子串 sub 重复多次构成的。也就是说,s 的形式是:
    s = sub + sub + sub + ... + sub
    
    那么s+s去掉头尾后,必然还存在sub+sub+sub+…+sub(即s)的模式。
  • 通过这个思路,我们可以得出结论:检查 s + s 去掉头尾后,如果还包含原始的 s,那么就说明 s 是由某个子串重复构成的。

代码

	```
	class Solution:
	    def repeatedSubstringPattern(self, s: str) -> bool:
	        # 通过拼接字符串 s + s
	        doubled_s = s + s
	        # 检查 s 是否出现在 doubled_s 中,但去掉头尾
	        # 即检查 doubled_s[1:-1] 中是否包含 s
	        return s in doubled_s[1:-1]
	```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值