任务是返回一个字符串在另一个字符串中出现的次数。问题很简单,我打算用函数来解决count()。一切似乎都很顺利:
>>> 'abcdefabc'.count('abc')
2
>>> 'aaa'.count('a')
3
>>> 'abca'.count('a')
2
然后突然:
>>> 'catcatcat'.count('catcat')
1
理论上,count()它应该返回字符串中子字符串出现的次数。事实证明,它返回不相交出现的次数。
问题:如果您需要返回出现的总数以及交集,该怎么办?也就是说,最后一个例子返回2?
正则表达式:
答案取自英语 SO: String count with Overlapencions。
那里还提出了其他几种解决方案。
来自Python文档
str.count:因此
要使检查考虑交叉点,您可以实现以下方法:
还有这个单线
N+M对于使用 z 函数的时间。当处理大字符串时,线性时间非常有用。要在 200000 中搜索长度为 20000 的模式,时间为 0.36 秒,而常规模式为 31 秒。该模式被分配了一个在两行和正在执行搜索的
pattern行中都缺失的字符。s如果某个地方的z函数的值与模式的长度一致lp,则找到一个出现(从位置开始的后缀i与前缀长度一致lp- 并且这个前缀就是模式)