繁体   English   中英

字符串中连续 1 的最大数目

[英]Maximum number of consecutive 1's in a string

给出一个长度为 N(最多 10^5)的字符串,它只包含 0 和 1。我们必须从原始字符串中删除两个长度正好为 K 的子字符串,以最大化连续 1 的数量。

例如假设字符串是 1100110001 并且 K=1。

所以我们可以删除两个长度为 1 的子字符串。 这里最好的选择是删除第 3 位和第 4 位的 0 并得到输出为 4(因为新字符串将是 11110001)

如果我尝试蛮力,它肯定会超时。 我不知道滑动窗口是否有效。 任何人都可以给我任何关于如何进行的提示吗? 显然我并不要求完整的答案,只是一些提示对我有用。 提前致谢 :)

这有一个非常简单的动态规划解决方案。

对于每个索引i ,计算:

  1. 如果没有删除任何内容,则紧跟其之前的 1 序列的长度;
  2. 可以紧跟在它前面的最长 1 序列,如果在它之前正好删除了一个子串;
  3. 如果正好在它之前删除了两个子字符串,则可以紧跟在它前面的最长 1 序列。

对于每个索引,这三个值很容易在恒定时间内从早期索引的值中计算出来,因此您可以在O(N)时间内一次性完成此操作。

例如,让BEST(i,r)是移除 r 个子串后紧邻位置 i 之前的最佳长度。 如果i >= K ,那么您可以删除以i结尾的子字符串,并为r > 0设置BEST(i,r) = BEST(iK,r-1) 如果string[i-1] = '1'那么你可以从前一个位置扩展序列并有BEST(i,r) = BEST(i-1,r)+1 为每个i,r选择最佳可能性。

您在步骤 (3) 中找到的最大值就是答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM