擅长:python、mysql、java
<p>在这里,您可以找到一个解决方案,它在<code>string.find()</code>周围使用递归包装器搜索主字符串中所有子字符串的出现。
<code>collectallchuncks()</code>函数返回一个<code>defaultdict</code>,其中所有的子字符串都是键,对于每个子字符串,都是在主字符串中找到子字符串的所有索引的列表。在</p>
<pre><code>import collections
# Minimum substring size, may be 1
MINSIZE = 3
# Recursive wrapper
def recfind(p, data, pos, acc):
res = data.find(p, pos)
if res == -1:
return acc
else:
acc.append(res)
return recfind(p, data, res+1, acc)
def collectallchuncks(data):
res = collections.defaultdict(str)
size = len(data)
for base in xrange(size):
for seg in xrange(MINSIZE, size-base+1):
chunk = data[base:base+seg]
if data.count(chunk) > 1:
res[chunk] = recfind(chunk, data, 0, [])
return res
if __name__ == "__main__":
data = 'khjkzahklahjTESTkahklaghTESTjklajhkhzkhjkzahklahjTESTkahklaghTESz'
allchuncks = collectallchuncks(data)
print 'TEST', allchuncks['TEST']
print 'hklag', allchuncks['hklag']
</code></pre>
<p>编辑:如果只需要主字符串中每个子字符串的出现次数,则无需递归函数即可轻松获得:</p>
^{pr2}$