Try   HackMD

926.Flip String to Monotone Increasing

tags: Medium,String,DP

926. Flip String to Monotone Increasing

題目描述

A binary string is monotone increasing if it consists of some number of 0's (possibly none), followed by some number of 1's (also possibly none).

You are given a binary string s. You can flip s[i] changing it from 0 to 1 or from 1 to 0.

Return the minimum number of flips to make s monotone increasing.

範例

Example 1:

Input: s = "00110"
Output: 1
Explanation: We flip the last digit to get 00111.

Example 2:

Input: s = "010110"
Output: 2
Explanation: We flip to get 011111, or alternatively 000111.

Example 3:

Input: s = "00011000"
Output: 2
Explanation: We flip to get 00000000.

Constraints:

  • 1 <= s.length <= 105
  • s[i] is either '0' or '1'.

解答

Python

class Solution: def minFlipsMonoIncr(self, s: str) -> int: # f0: Answer to 0's monotone string steps # f1: Answer to followed by some number of 1's monotone string steps f0, f1 = 0, 0 for ch in s: if ch == '0': f1 += 1 else: f1 = min(f0, f1) f0 += 1 return min(f0, f1)

Ron ChenJan 17, 2023

C++

思路:
  1. 考慮一個合法的string, +"1"時合法不變, +"0"時結果有二, 一為把前面出現的1全變成0, 二為把當前0變成1
做法:
  1. 遍歷string, 紀錄1的數量, 出現0時更新結果, 看是改0還是1
class Solution { public: int minFlipsMonoIncr(string s) { int cnt_1 = 0, res = 0; for(char c : s) { if(c == '1') cnt_1++; else res = min(res+1, cnt_1); } return res; } };

XD Jan 17, 2023

Time:

O(n)
Extra Space:
O(1)

Reference

回到題目列表