【发布时间】:2013-10-29 12:29:56
【问题描述】:
如何在二进制字符串中找到余额的最长子字符串,即1和0的数量之差>= 0?
例子:
01110000010 -> 6: 011100
1110000011110000111 -> 19:整个字符串
虽然这个问题看起来与Maximum Value Contiguous Subsequence (Maximum Contiguous Sum) 问题非常相似,但动态规划解决方案似乎并不明显。在分而治之的方法中,如何进行合并?毕竟“高效”的算法是可能的吗? (一个简单的 O(n^2) 算法只会遍历所有可能的起点的所有子字符串。)
这是Finding a substring, with some additional conditions 的修改变体。不同之处在于,在链接的问题中,仅允许平衡永远不会低于零的此类子字符串(以向前或向后的方向查看字符串)。在给定的问题中,允许余额低于零,只要它在稍后的某个阶段恢复。
【问题讨论】:
-
您在其他问题中的回答不是在
O(n)中使用您的线性时间动态规划回答了这个问题吗? -
你的第二个例子有20个字符,不是19个,整个字符串的余额是-2,不是>=0
-
@Zruty:修正了第二个例子。
-
@justhalf:稍后会发布。只是在寻找一些竞争:-)
-
@krlmlr 这个问题与您链接的上一个问题有何不同?
标签: algorithm language-agnostic