擅长:python、mysql、java
<p>考虑到你只想在一开始就找到一个匹配的,只需压缩,比较和返回。你知道吗</p>
<pre><code>from itertools import izip
def sub_match(s, sub):
out = ""
for a, b in izip(s, sub): # zip python3
if a != b:
return out
out += a
return out
</code></pre>
<p>如果要在sub中查找任何匹配项:</p>
<pre><code>from itertools import islice, izip
def sub_match(s, sub):
all_m = []
for i in range(len(sub)):
out = ""
for a, b in izip(s, islice(sub,i,None)):
if a != b:
all_m.append(out)
break
out += a
else:
all_m.append(out)
return max(all_m, key=len)
</code></pre>
<p>输出:</p>
<pre><code>In [12]: s = "csrababc"
In [13]: p = "ababc"
In [14]: sub_match(s,p)
Out[14]: 'c'
In [15]: s = "ababdc"
In [16]: sub_match(s,p)
Out[16]: 'abab'
</code></pre>