本文实例讲述了Python字符串匹配算法KMP。分享给大家供大家参考。具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#!/usr/bin/env python
#encoding:utf8
def next (pattern):
p_len = len (pattern)
pos = [ - 1 ] * p_len
j = - 1
for i in range ( 1 , p_len):
while j > - 1 and pattern[j + 1 ] ! = pattern[i]:
j = pos[j]
if pattern[j + 1 ] = = pattern[i]:
j = j + 1
pos[i] = j
return pos
def kmp(ss, pattern):
pos = next (pattern)
ss_len = len (ss)
pattern_len = len (pattern)
j = - 1
for i in range (ss_len):
while j > - 1 and pattern[j + 1 ] ! = ss[i]:
j = pos[j]
if pattern[j + 1 ] = = ss[i]:
j = j + 1
if j = = pattern_len - 1 :
print 'matched @: %s' % str (i - pattern_len + 1 )
j = pos[j]
kmp(u '上海自来水来自海上海' , u '上海' )
|
希望本文所述对大家的Python程序设计有所帮助。