如何解决将字符串与没有不匹配的模式匹配我的代码工作正常,但我不知道如何优化它并使其更快
#python3
import sys
from _collections import deque
def hashTable(s,prime,x): # calcuate hash
h = list([] for _ in range(len(s) + 1))
h[0] = 0
for i in range(1,len(s) + 1):
h[i] = (h[i - 1] * x + ord(s[i - 1])) % prime
return h
def subhash(table,start,length): #calculate subhash
y = pow(x,length,pr)
hash_value = (table[start + length] - y * table[start]) % pr
return hash_value
def nextmsm(le,i,n): #find next mismatch
c = 0
st = deque()
st.append((0,le))
a = 0
while len(st) != 0:
if c > n:
break
a,le = st.pop()
th = subhash(tx,a+i,le)
ph = subhash(pt,a,le)
if th == ph:
continue
if le == 1:
if th != ph:
c = c + 1
else :
st.append((a,le//2))
st.append((a+le//2,le - le//2))
if c > n:
return False
return True
def solve(o,text,pattern): # find pattern with mismatch
global tx,pt
pos = []
tx = hashTable(text,pr,x)
pt = hashTable(pattern,x)
for i in range(len(text) - len(pattern)+1):
if nextmsm(len(pattern),o):
pos.append(i)
return pos
pr = 1000000007
x = 263
while True:
line = input()
k,t,p = line.split()
ans = solve(int(k),p)
print(len(ans),*ans)
这个 sol 首先接受输入 k 是最大不匹配,t= 文本,p = 模式,然后传递给计算哈希值的求解函数,并调用函数 msmatch 来查找不匹配。 Msmatach 函数计算 subhash,然后在二进制搜索的帮助下帮助找到不匹配
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。