我正在学习算法,正在尝试解决二进制子字符串的问题。
我只能想到暴力策略。有可能以更好的方式做到这一点吗?
我将通过示例展示我的方法。
考虑以下二进制字符串
010001
答案是6 =>(2,4),(1,4),(0,4),(2,5),(1,5),(0,5)
我的方法:
我该怎么做呢?
答案 0 :(得分:1)
首先,您不能在O(n)
内完成此操作,因为您必须扫描字符串以查找所有3次相同的运行。
但为了使它有趣,请假设我们的字符串为0100111000010
。在一次扫描中,我们可以列出至少结束3次运行的所有位置。将字符串的开头计为0
,这些位置为7, 10, 11
,字符串的长度为13。
我们可以从中找到答案吗?
对于从5
到0
的{{1}}起始位置以及从7-3=4
到8
的所有7
结束位置(非常小心潜在的击剑杆错误!)我们包括1s的第一次运行。所以那里有13
。
对于从40
到3
的{{1}}起始位置以及从5
到10-3=7
的所有4
结束位置,我们包括第一个{ {1}},还有10
。
对于从13
到000
的{{1}}起始位置以及从12
到1
的所有8
结束位置,我们包括第二个{ {1}},还有11-3=8
。
因此答案是3
。
您可以概括一下此行推理并编写程序吗?如果是这样,它将在最佳时间11
内执行。