Python每日一练--LEETCODE--重复子字符串

本文介绍了两种方法来检测字符串中是否存在由一个子字符串重复构成的模式:暴力法通过遍历子字符串长度并利用滑动窗口思想,官方做法则是利用字符串加倍并在适当区间查找原字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:::::

###重复的子字符串,思路:暴力法,遍历字符串的长度。然后使用滑动窗口的思想,
# 思考一下,字符串特点,如果一个子字符串重复构成一个字符串,那这个子字符串的长度一定能被字符串长度整除
#多次重复构成,子字符串长度不能超过字符串长度一半,子字符串长度最大长度是字符串长度的一半
#基于限制条件,优化暴力法
def repeatedSubstringPattern(s):
    possiblelen=[] ##建立一个list,用于放置子字符串可能的长度
    n=len(s) ###计算字符串长度
    for i in range (1,n//2+1): ###计算子字符串可能的长度,因为是长度,所以i开始值是1,i的最大值是字符串长度的一半
        if n%i==0: ###能被整除,就是子字符串长度的取值
            possiblelen.append(i)  ###存放置list中
    for i in possiblelen:  ###已知子字符串长度,使用滑动窗口思想,遍历list所有取值
        base=s[:i]  ###子字符串
        for j in range(n-i+1): ###滑动窗口思想,滑动范围是 字符串长度减去子字符串长度
            if s[j:j+i]!=base:
                break
            if j==n-i:
                return True
    return False
print(repeatedSubstringPattern("aba"))
方法二:

官方的做法,看不懂,有看懂的可以解释一下,谢谢

###切片是是个左闭右开的取值。闭是能取到那个值,开是不能取到那个值
#####   !=-1表明包含此字符串。若是==-1,则表明不包含字符串

###目前的理解就是 将字符串duble一下,掐头去尾 还能找到原字符串,则这个原字符串就是符合条件,由一个子字符串重复组成的

def repeatedSubstringPattern(s):
    return (s+s)[1:len(s)*2-1].find(s)!=-1

print(repeatedSubstringPattern("abcab"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值