Algorithm 具有至少3个连续相同字符的二进制子字符串数
我正在学习算法,并试图用二进制子串来解决这个问题 我能想到的只有暴力战略。有没有可能用更好的方法来做呢 我将使用示例展示我的方法 考虑以下二进制字符串Algorithm 具有至少3个连续相同字符的二进制子字符串数,algorithm,Algorithm,我正在学习算法,并试图用二进制子串来解决这个问题 我能想到的只有暴力战略。有没有可能用更好的方法来做呢 我将使用示例展示我的方法 考虑以下二进制字符串 010001 答案是6=>(2,4),(1,4),(0,4),(2,5),(1,5),(0,5) 我的做法: 查找至少包含3个相同字符的子字符串 进入左侧和右侧并计算结果 对至少3个相同字符的每个子字符串重复此操作 如何更好地执行此操作?首先,您不能在少于时间的时间内执行此操作O(n),因为您必须扫描字符串才能找到3次相同的运行 但为了让它更有
010001
答案是6=>(2,4),(1,4),(0,4),(2,5),(1,5),(0,5)
我的做法:
如何更好地执行此操作?首先,您不能在少于时间的时间内执行此操作
O(n)
,因为您必须扫描字符串才能找到3次相同的运行
但为了让它更有趣,假设我们的字符串是0100111000010
。在一次扫描中,我们可以列出我们结束至少3次运行的所有位置。将字符串的开头计数为0
,这些位置为7、10、11
,字符串的长度为13
我们能从中找到答案吗
对于从0
到7-3=4
的5
起始位置,以及从7
到13
的所有8
结束位置(请非常小心潜在的围栏柱错误!),我们包括第一次运行的1。所以这里有40个
对于从5
到10-3=7
的3
起始位置和从10
到13
的所有4
结束位置,我们包括第一个000
,即12
更多
对于从8
到11-3=8
的1
起始位置和从11
到13
的所有3
结束位置,我们包括第二个000
,即3
更多
因此答案是40+12+3=55
你能概括这一行并编写程序吗?如果是这样,它将在时间
O(n)
中执行,这是最好的。是的,这是一个组合问题。在你描述的算法中,你一定不要忘记删除重复的子字符串(简单地说你也应该注意重复计数)@WillemVanOnsem是的,但我仍然不知道如何解决它:(