簡體   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