A string of
'0'
s and'1'
s is monotone increasing if it consists of some number of'0'
s (possibly 0), followed by some number of'1'
s (also possibly 0.)We are given a string
S
of'0'
s and'1'
s, and we may flip any'0'
to a'1'
or a'1'
to a'0'
.Return the minimum number of flips to make
S
monotone increasing.Example 1:
Input: "00110" Output: 1 Explanation: We flip the last digit to get 00111.
思路:第一趟遍历,记录字符串中0的个数,即当全部翻转为1需要的次数。
第二次遍历,从零位开始,每当这位为1,将sum+1,这位为0,sum-1,即基于之前的sum,将第i位(包括i)之前为0,之后为1需要翻转的次数,每次的sum都与前一个sum正好差1,记录出所有sum中最小的即为结果。
class Solution {
public:
int minFlipsMonoIncr(string S) {
int sum=0,smax=20005;
int l=S.length();
for(int i=0;i<l;i++)
{
if(S[i]!='1') sum++;
}
smax=sum;
for(int i=0;i<l;i++)
{
if(S[i]=='0') sum--;
else sum++;
if(sum<smax) smax=sum;
}
return smax;
}
};