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)