將字符串翻轉(zhuǎn)到單調(diào)遞增

力扣926. 將字符串翻轉(zhuǎn)到單調(diào)遞增
如果一個(gè)由 '0' 和 '1' 組成的字符串,是以一些 '0'(可能沒有 '0')后面跟著一些 '1'(也可能沒有 '1')的形式組成的,那么該字符串是單調(diào)遞增的。
我們給出一個(gè)由字符 '0' 和 '1' 組成的字符串 S,我們可以將任何 '0' 翻轉(zhuǎn)為 '1' 或者將 '1' 翻轉(zhuǎn)為 '0'。
返回使 S 單調(diào)遞增的最小翻轉(zhuǎn)次數(shù)。

示例 1:
輸入:"00110"
輸出:1
解釋:我們翻轉(zhuǎn)最后一位得到 00111.

示例 2:
輸入:"010110"
輸出:2
解釋:我們翻轉(zhuǎn)得到 011111,或者是 000111。

示例 3:
輸入:"00011000"
輸出:2
解釋:我們翻轉(zhuǎn)得到 00000000。

提示:
1 <= S.length <= 20000
S 中只包含字符 '0' 和 '1'

來源:力扣(LeetCode)
鏈接
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

心路歷程:

在最初拿到這道題以及看到它給的例子時(shí),很容易會(huì)想到說要翻轉(zhuǎn)的數(shù)字會(huì)不會(huì)和左右兩邊的數(shù)字是有聯(lián)系的。

就好像實(shí)例2:把010110翻轉(zhuǎn)成第一種011111或第二種000111,在第一種結(jié)果會(huì)想到第二個(gè)0翻轉(zhuǎn)過來是因?yàn)樽筮吺?,在第二種結(jié)果把1翻轉(zhuǎn)是因?yàn)橛疫吺?,但是這種只從左右兩邊的數(shù)字判斷當(dāng)前的數(shù)字是否需要翻轉(zhuǎn)顯然過于片面,并且結(jié)果是不準(zhǔn)確的。

因此會(huì)想到,想要翻轉(zhuǎn)的次數(shù)最小,就要尋找出,在一串?dāng)?shù)字中的某一段數(shù)字里面0的個(gè)數(shù)比1少(或者1的個(gè)數(shù)比0少),從而實(shí)現(xiàn)單調(diào)遞增。

例如000001101000011100111001111

什么時(shí)候要開始計(jì)數(shù)呢?難道從第一個(gè)數(shù)開始計(jì)數(shù)嗎?不是的,從例子可以看出,無論前面有多少個(gè)0都沒有關(guān)系,不可能因?yàn)榭倲?shù)的0比總數(shù)1多就要把全部的1翻轉(zhuǎn)過來。

所以是從出現(xiàn)第一個(gè)1開始計(jì)數(shù),每當(dāng)出現(xiàn)0的個(gè)數(shù)大于1的個(gè)數(shù)就把前面數(shù)到的1翻轉(zhuǎn)(因?yàn)楹竺孢€有0,把0翻轉(zhuǎn)的代價(jià)比1大),然后重新計(jì)數(shù),直到數(shù)完這一串?dāng)?shù),然后把計(jì)數(shù)的0翻過來。

代碼如下:

#include "iostream";
using namespace std;
int main(){
    string s;
    int count0=0,count1=0,i=0,numcount=0;
    cin>>s;
    int len=s.length();
    while(i<len){
        if(s[i++]=='1')
           count1++;
        else 
        {
           if(count1>0)  count0++;
        }
        if(count0>count1)
           {
             numcount+=count1;
             count0=0;
             count1=0;
           }
    }
    cout<<numcount+count0<<endl;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,711評論 0 5
  • 1. 找出數(shù)組中重復(fù)的數(shù)字 題目:在一個(gè)長度為n的數(shù)組里的所有數(shù)字都在0到n-1的范圍內(nèi)。數(shù)組中某些數(shù)字是重復(fù)的,...
    BookThief閱讀 2,009評論 0 2
  • 字符串是一系列字符,如“hello, world”或“albatross”。Swift字符串由字符串類型表示。字符...
    微笑中的你閱讀 1,809評論 0 0
  • 級(jí)別: ★☆☆☆☆標(biāo)簽:「iOS」「Swift 5.1」「字符串」作者: 沐靈洛審校: QiShare團(tuán)隊(duì) 字符串...
    QiShare閱讀 4,311評論 0 11
  • 字符串的基本操作 字符串是Python中最常用的數(shù)據(jù)類型。我們可以使用引號(hào)('或")創(chuàng)建字符串。創(chuàng)建字符串很簡單,...
    瀧汰泱閱讀 1,011評論 0 0

友情鏈接更多精彩內(nèi)容