具有至少3个连续的相同字符的二进制子字符串的数量

时间:2018-12-11 19:09:14

标签: algorithm

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

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

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

考虑以下二进制字符串

010001

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

我的方法:

  1. 查找至少包含3个相同字符的子字符串。
  2. 左右移动计算结果。
  3. 为每个子串重复至少3个相同的字符。

我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

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

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

我们可以从中找到答案吗?

对于从50的{​​{1}}起始位置以及从7-3=48的所有7结束位置(非常小心潜在的击剑杆错误!)我们包括1s的第一次运行。所以那里有13

对于从403的{​​{1}}起始位置以及从510-3=7的所有4结束位置,我们包括第一个{ {1}},还有10

对于从13000的{​​{1}}起始位置以及从121的所有8结束位置,我们包括第二个{ {1}},还有11-3=8

因此答案是3

您可以概括一下此行推理并​​编写程序吗?如果是这样,它将在最佳时间11内执行。