deffun2(s):iflen(s)<10:return[]
select =set()# 因不记录次数,所以只要>=2就可以count# count=0
cur =""
res =[]
panduan =set()for i inrange(10):
cur += s[i]
select.add(cur)for i inrange(10,len(s)):
cur = cur[1::]+ s[i]if cur in select:# count+=1if cur notin panduan:
res.append(cur)
panduan.add(cur)else:
select.add(cur)return res
更加方便的写法,优化了添加思路
deffun3(s):iflen(s)<10:return[]
select ={}# count=0
cur =""
res =[]for i inrange(10):
cur += s[i]
select[cur]=1for i inrange(10,len(s)):
cur = cur[1::]+ s[i]
select[cur]=select.get(cur,0)+1if select[cur]==2:#这样只会添加第一次
res.append(cur)return res
deffun4(s):
n =len(s)
P =131# 用于获取唯一哈希值
h =[0for i inrange(n +1)]# 用于获取唯一哈希值
p =[0for i inrange(n +1)]# 用于获取唯一哈希值
ans =[]# 创建一个列表
p[0]=1# 方便初始化,这里后面需要乘Pfor i inrange(1, n +1):
h[i]= h[i -1]* P +ord(s[i -1])
p[i]= p[i -1]* P
map={}
i =1while i +10-1<= n:
j = i +10-1hash= h[j]- h[i -1]* p[j - i +1]
cnt =map.get(hash,0)# 字符串if cnt ==1:# 说明已经有过了
ans.append(s[i -1:i +10-1])map[hash]= cnt +1
i +=1return ans