【问题标题】:Number of binary substrings with minimum 3 consecutive identical characters具有最少 3 个连续相同字符的二进制子串的数量
【发布时间】:2018-12-12 07:53:44
【问题描述】:

我正在学习算法,我正在尝试解决二进制子字符串的问题。

我只能想到蛮力策略。是否有可能以更好的方式做到这一点?

我将通过示例展示我的方法。

考虑以下二进制字符串

010001

答案是 6 => (2,4), (1,4), (0,4), (2,5), (1,5), (0,5)

我的做法:

  1. 查找具有最少 3 个相同字符的子字符串。
  2. 左右进入计算结果。
  3. 对每个包含至少 3 个相同字符的子字符串重复。

我怎样才能做得更好?

【问题讨论】:

  • 是的,这是一个组合问题。
  • 在您描述的算法中,您不能忘记删除重复的子字符串(简单地说您还应该注意重复计算)
  • @WillemVanOnsem 是的,但我仍然不知道如何咬它:(

标签: algorithm


【解决方案1】:

首先,您不能在少于时间O(n) 内完成此操作,因为您必须扫描字符串以找到所有 3 个相同的运行。

但为了有趣,假设我们的字符串是0100111000010。在一次扫描中,我们可以列出我们结束至少 3 个运行的所有位置。将字符串的开头计数为0,这些位置是7, 10, 11,并且字符串的长度为 13。

我们能从中找到答案吗?

对于从07-3=45 起始位置和从7713 的所有8 结束位置(要非常小心潜在的栅栏错误!)我们包括第一个运行 1s。所以那里有40

对于从510-3=73 起始位置和从1013 的所有4 结束位置,我们包括第一个000,即12 更多。

对于从811-3=81 起始位置以及从1113 的所有3 结束位置,我们包括第二个000,即3 更多。

因此答案是40 + 12 + 3 = 55

你能概括这条线推理并编写一个程序吗?如果是这样,它将及时执行O(n),这是最好的。

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    相关资源
    最近更新 更多