我在哪?(二分)

​​​​​​https://blog.csdn.net/qq_55364042/article/details/130098343?spm=1001.2014.3001.5501

二分的基础题(可去上面的网址查找),这一题可以让人对二分的运用有更深的了解

题目要求:给定一个字符串,找一个尽量小的长度k,使得任意长度为k的子串都是唯一的

例:’abcabcd‘

长度为1:有两个‘a' 不行

长度为2:有两个 ’ab' 不行

长度为3:有两个 ‘abc’ 不行

长度为四可以

思路:

使用二分,若当前长度不行则更短的也不行所以试更长的,若当前长度行则试试更短的

代码实现

a=input()
def seek(k):
    l,r=0,k
    s=set()
    while r<=len(a):
        if a[l:r] in s:
            return False
        s.add(a[l:r])
        l+=1
        r+=1
    return True

l,r=0,len(a)
ans=float('inf')
while l<r:
    mid=(l+r)//2
    if seek(mid):
        r=mid
        ans=min(ans,mid)
    else:
        l=mid+1

print(ans)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自 在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值