[英]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 ,計算:
對於每個索引,這三個值很容易在恆定時間內從早期索引的值中計算出來,因此您可以在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.