將字串翻轉到單調遞增

2021-09-17 07:55:17 字數 1332 閱讀 7139

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

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

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

示例 1:

輸入:"00110"輸出:1解釋:我們翻轉最後一位得到 00111.
思路:

1、首先從首部開始尋找最先出現的『1』位置l,從尾部尋找最後出現的『0』的位置h

2、 對字串的翻轉出現在[l,h]區間中

3、以gap為分割點從l到h每次+1遞增,判斷gap左邊『1』的個數,判斷gap右邊『0』的個數,相加求和,比較每個gap分割點的和的最小值,如果不做優化,會超時

4、建立rdp[i]儲存以i為分割點左邊的為'1'的個數,ldp[i]儲存以i為分割點右邊的'0'的個數,那麼求rdp[gap]判斷上乙個點為'1',那麼rdp[gap]=rdp[gap-1]+1,求ldp[gap]判斷上乙個節點為'0',那麼ldp[gap] =ldp[gap-1]-1

class solution 

int l=-1;int h=-1;

int cmin=integer.max_value;

rdp = new int[nums.length+1];

ldp = new int[nums.length+1];

for(int i=0;i=0;i--)

}if(l==-1||h==-1||l>=h)

for(int i=l;i<=h+1;i++)

return cmin;

}public int countmin(int l,int h,int gap,char nums)else

}elseelse

}else

}ldp[gap]=count;

}" "+ldp[gap]);

return rdp[gap]+ldp[gap];

}}

LeetCode 將字串翻轉到單調遞增

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

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...