926. 将字符串翻转到单调递增

就是个dp

如果s[i] == 0,

s[i]还想是0

则i - 1必定为0, dp[i][0] = dp[i - 1][0];

 s[i]想变成1,则i - 1是0是1无所谓

 dp[i][1] = min(dp[i - 1][0], dp[i - 1][1]) + 1

如果s[i] == 1,与上述情况相反即可

class Solution {
public:


    int minFlipsMonoIncr(string s) {
        int len = s.length();
        int dp[len + 1][2];
        memset(dp, 0, sizeof(dp));
        int cnt = 0, flag = 0;
        for(int i = 0; i < len; i++)
        {
            if(s[i] == '1') cnt++;
            if(flag == 0 && cnt == 1)
            {
                flag = 1;
                dp[i][0] = 1;
                dp[i][1] = 0;
            }
            else if(cnt == 0) continue;
            else
            {
                if(s[i] == '0')
                {
                    dp[i][0] = dp[i - 1][0];
                    dp[i][1] = min(dp[i - 1][0], dp[i - 1][1]) + 1;
                }
                else
                {
                    dp[i][0] = dp[i - 1][0] + 1;
                    dp[i][1] = min(dp[i - 1][0], dp[i - 1][1]);
                }
            }
        }
        return min(dp[len - 1][0], dp[len - 1][1]);


    }
};
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
原文地址:https://www.cnblogs.com/WTSRUVF/p/15585157.html