LeetCode 將字串翻轉到單調遞增

2021-09-25 05:26:48 字數 1290 閱讀 7365

如果乙個由 『0』 和 『1』 組成的字串,是以一些 『0』(可能沒有 『0』)後面跟著一些 『1』(也可能沒有 『1』)的形式組成的,那麼該字串是單調遞增的。

我們給出乙個由字元 『0』 和 『1』 組成的字串 s,我們可以將任何 『0』 翻轉為 『1』 或者將 『1』 翻轉為 『0』。

返回使 s 單調遞增的最小翻轉次數。

示例 1:

輸入:"00110"

輸出:1

解釋:我們翻轉最後一位得到 00111.

示例 2:

輸入:"010110"

輸出:2

解釋:我們翻轉得到 011111,或者是 000111。

示例 3:

輸入:"00011000"

輸出:2

解釋:我們翻轉得到 00000000。

1 <= s.length <= 20000

s 中只包含字元 '0' 和 '1'

思路分

析:\color思路分析:

思路分析

:這道題看起來不難,蛋式如果沒有找到正確的切入點的話,還是有點麻煩的。

首先解釋一下題意,這道題給乙個只有「0」、「1」構成的字串,我們可以翻轉字串中的任意字元,從而使整個字串單增。這道題「字串遞增」的形式是形如「001111」,「0000001」,「000000」,「111111111111」這種。

我們順序掃瞄整個字串,當我們遇到第乙個為「1」的字元,這時開始計算「0」的個數,當「0」的個數超過了「1」的個數,這時說明我們將這一小段中的「0」翻轉為「1」所需要的代價會超過把所有的「1」翻轉為「0」的代價。因此我們只能採取將這一小段中的「1」翻轉為「0」,然後清空兩個計數器,繼續尋找下乙個為「1」位置,並且重複此過程。

class

solution

else

if(numone)

if(numzero > numone)

}//最後需要處理末尾一小段

//如果這一小段出現0的個數多於1的個數,在while迴圈已經採取將1翻轉的策略,此時numzero已經清零

//否則只能採取將「0」翻轉為「1」的策略

LeetCode 926 將字串翻轉到單調遞增

基本思路就是 在這個字串中,存在某乙個點,在這個點之前所有的字元均為0,後面的字元均為1,那麼我們就可以遍歷這個字串來找到這個點。首先遍歷整個字串,找到將字串全部變為 1 所需要的次數one num,然後再從頭開始遍歷字串,每找到乙個 0 那麼就將one num減一,每找到乙個 1 就將zero n...

leetcode 926 將字串翻轉到單調遞增

如果乙個由 0 和 1 組成的字串,是以一些 0 可能沒有 0 後面跟著一些 1 也可能沒有 1 的形式組成的,那麼該字串是單調遞增的。我們給出乙個由字元 0 和 1 組成的字串 s,我們可以將任何 0 翻轉為 1 或者將 1 翻轉為 0 返回使 s 單調遞增的最小翻轉次數。示例 1 輸入 0011...

將字串翻轉到單調遞增

如果乙個由 0 和 1 組成的字串,是以一些 0 可能沒有 0 後面跟著一些 1 也可能沒有 1 的形式組成的,那麼該字串是單調遞增的。我們給出乙個由字元 0 和 1 組成的字串s,我們可以將任何 0 翻轉為 1 或者將 1 翻轉為 0 返回使s單調遞增的最小翻轉次數。示例 1 輸入 00110 輸...