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]); } };