RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1543168
Accepted
Глеб
Глеб
Asked:2023-09-29 18:35:59 +0000 UTC2023-09-29 18:35:59 +0000 UTC 2023-09-29 18:35:59 +0000 UTC

查找重叠出现:计数函数崩溃

  • 772

任务是返回一个字符串在另一个字符串中出现的次数。问题很简单,我打算用函数来解决count()。一切似乎都很顺利:

>>> 'abcdefabc'.count('abc')
2
>>> 'aaa'.count('a')
3
>>> 'abca'.count('a')
2

然后突然:

>>> 'catcatcat'.count('catcat')
1

理论上,count()它应该返回字符串中子字符串出现的次数。事实证明,它返回不相交出现的次数。

问题:如果您需要返回出现的总数以及交集,该怎么办?也就是说,最后一个例子返回2?

python
  • 3 3 个回答
  • 89 Views

3 个回答

  • Voted
  1. Best Answer
    Эникейщик
    2023-09-29T18:52:28Z2023-09-29T18:52:28Z

    正则表达式:

    len(re.findall('(?=catcat)', 'catcatcat'))
    

    答案取自英语 SO: String count with Overlapencions。

    那里还提出了其他几种解决方案。

    • 7
  2. Acinit
    2023-09-29T18:42:39Z2023-09-29T18:42:39Z

    来自Python文档str.count:

    返回子字符串 sub 在范围 [ start , end ]中非重叠出现的次数。可选参数 start 和 end 被解释为切片表示法。

    如果 sub 为空,则返回字符之间的空行数,等于行长度加一。

    因此

    >>> 'catcatcat'.count('catcat')
    1
    

    要使检查考虑交叉点,您可以实现以下方法:

    def count_overlapping_substrings(main_string, substring):
        count = 0
        start = 0
        while True:
            start = main_string.find(substring, start)  # Ищем следующее вхождение подстроки
            if start == -1:
                break
            count += 1
            start += 1  # Перемещаемся вправо, чтобы избежать бесконечного цикла при пересечениях
        return count
    
    # Примеры использования:
    print(count_overlapping_substrings('abcdefabc', 'abc'))  # Вывод: 2
    print(count_overlapping_substrings('aaa', 'a'))  # Вывод: 3
    print(count_overlapping_substrings('abca', 'a'))  # Вывод: 2
    print(count_overlapping_substrings('catcatcat', 'catcat'))  # Вывод: 2
    

    还有这个单线

    import re
    count = re.subn('(?=catcat)', '', 'catcatcat')[1]
    print(count)
    
    • 3
  3. MBo
    2023-09-29T22:21:32Z2023-09-29T22:21:32Z

    N+M对于使用 z 函数的时间。当处理大字符串时,线性时间非常有用。要在 200000 中搜索长度为 20000 的模式,时间为 0.36 秒,而常规模式为 31 秒。

    该模式被分配了一个在两行和正在执行搜索的pattern行中都缺失的字符。s如果某个地方的z函数的值与模式的长度一致lp,则找到一个出现(从位置开始的后缀i与前缀长度一致lp- 并且这个前缀就是模式)

    def cntoverlapped(s, pat):
        cnt = 0
        ps = pat + '$' + s
        lp = len(pat)
        n = len(ps)
        z = [0]*n
        l = 0
        r = 0
        for i in range(1, n):
            if (i <= r):
                z[i] = min (r-i+1, z[i-l])
            while (i+z[i] < n) and (ps[z[i]] == ps[i+z[i]]):
                z[i] += 1
            if (i+z[i]-1 > r):
                l = i
                r = i+z[i]-1
            if z[i]==lp:
                cnt += 1
        return cnt
    
    print(cntoverlapped('ababababa', 'aba'))
    
    >> 4
    
    • 3

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5