forked from haoel/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
MinimumChangesToMakeAlternatingBinaryString.cpp
53 lines (51 loc) · 1.59 KB
/
MinimumChangesToMakeAlternatingBinaryString.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Source : https://leetcode.com/problems/minimum-changes-to-make-alternating-binary-string/
// Author : Hao Chen
// Date : 2021-02-14
/*****************************************************************************************************
*
* You are given a string s consisting only of the characters '0' and '1'. In one operation, you can
* change any '0' to '1' or vice versa.
*
* The string is called alternating if no two adjacent characters are equal. For example, the string
* "010" is alternating, while the string "0100" is not.
*
* Return the minimum number of operations needed to make s alternating.
*
* Example 1:
*
* Input: s = "0100"
* Output: 1
* Explanation: If you change the last character to '1', s will be "0101", which is alternating.
*
* Example 2:
*
* Input: s = "10"
* Output: 0
* Explanation: s is already alternating.
*
* Example 3:
*
* Input: s = "1111"
* Output: 2
* Explanation: You need two operations to reach "0101" or "1010".
*
* Constraints:
*
* 1 <= s.length <= 104
* s[i] is either '0' or '1'.
******************************************************************************************************/
class Solution {
public:
int minOperations(string s) {
int start_with_zero = 0;
int start_with_one = 0;
for (int i=0; i<s.size(); i++){
if (i % 2 == 0) {
s[i] == '1' ? start_with_zero++ : start_with_one++;
}else{
s[i] == '0' ? start_with_zero++ : start_with_one++;
}
}
return std::min(start_with_zero, start_with_one);
}
};