我正在处理一些字符串搜索任务,只是为了改进有效的搜索方式。 我试图通过使用向后搜索来实现一种计算给定字符串集中有多少子串的方法。 例如,给出以下字符串:
original = 'panamabananas$'
s = smnpbnnaaaaa$a
s1 = $aaaaaabmnnnps #sorted version of s
我试图找出子串禁止多少次'它发生了。为此,我考虑使用zip function
迭代两个字符串。在向后搜索中,我应首先在ban
中查找n
(s1
)的最后一个字符,并查看它与{{1}中的下一个字符a
的匹配位置}}。它匹配索引9,10和11,实际上是s
中的第三个,第四个和第五个a。要查找的下一个字符是s
,但仅适用于之前发生的匹配(这意味着,b
中的n
与s1
中的a
匹配。因此,我们从s
中获取了a
(第三,第四和第五),并查看s
中的第三,第四或第五a
中的任何一个是否与任何{{1}匹配在s。通过这种方式,我们会发现' ban'
迭代并保存cuasi-occurence对我来说似乎很复杂,所以我尝试的是这样的:
s1
我认为嵌套if语句可能需要,但我还是初学者。因为当原始版本中有一个禁令发生时我会出现0次。
答案 0 :(得分:0)
您可以使用find
运行循环来计算子字符串的出现次数。
s = 'panamabananasbananasba'
ss = 'ban'
count = 0
idx = s.find(ss, 0)
while (idx != -1):
count += 1
idx += len(ss)
idx = s.find(ss, idx)
print count
如果你真的想要向后搜索,那么反转字符串和子字符串并执行相同的机制。
s = 'panamabananasbananasban'
s = s[::-1]
ss = 'ban'
ss = ss[::-1]