You are given a binary string s of length n and an integer numOps.
You are allowed to perform the following operation on sat mostnumOps times:
Select any index i (where 0 <= i < n) and flips[i]. If s[i] == '1', change s[i] to '0' and vice versa.
You need to minimize the length of the longestsubstring of s such that all the characters in the substring are identical.
Return the minimum length after the operations.
Example 1:
Input:s = "000001", numOps = 1
Output:2
Explanation:
By changing s[2] to '1', s becomes "001001". The longest substrings with identical characters are s[0..1] and s[3..4].
Example 2:
Input:s = "0000", numOps = 2
Output:1
Explanation:
By changing s[0] and s[2] to '1', s becomes "1010".
Example 3:
Input:s = "0101", numOps = 0
Output:1
Constraints:
1 <= n == s.length <= 1000
s consists only of '0' and '1'.
0 <= numOps <= n
Solutions
Solution 1
Thinking
We may flip at most \(\textit{numOps}\) bits to minimize the longest run of equal characters. With \(n \le 1000\) we binary-search the target length \(m\).
For \(m=1\) the string must become 0101... or 1010...; we take the closer pattern. For \(m>1\) a run of length \(k\) needs \(\lfloor k/(m+1) \rfloor\) flips.
\(m\) is feasible when the total flips are at most \(\textit{numOps}\). The smallest such \(m\) is the answer.