Similar Problems
Similar Problems not available
Minimum Changes To Make Alternating Binary String - Leetcode Solution
LeetCode: Minimum Changes To Make Alternating Binary String Leetcode Solution
Difficulty: Easy
Topics: string
Problem Statement
A binary string is alternating if every two adjacent characters are different. For example, the strings "010" and "1010" are alternating, while the string "110" is not.
You are given a binary string s consisting of n characters. You can perform two types of operations on s:
- Change the i-th character of s to '0' or '1'.
- Swap the i-th and (i+1)-th characters of s. This operation can only be performed if i = 1, 2, ..., n-1.
Return the minimum number of operations needed to make s alternating, or -1 if it is impossible to make s alternating.
Solution
To make s alternating, we need to ensure that no two adjacent characters are the same. Since there are only two possible characters, '0' and '1', we can simply start with one of them, and then alternate between them.
So we try two cases:
- Start with '0', and alternate between '0' and '1'.
- Start with '1', and alternate between '1' and '0'.
For each case, we count the number of changes needed to transform s to the alternating string. The answer is the minimum of these two counts.
Note that a swap operation does not change the parity (even/oddness) of the number of adjacent pairs of equal characters. Therefore, if s already has an odd number of adjacent pairs of equal characters, it is impossible to make it alternating with any sequence of operations, and we return -1.
Pseudocode
count_01 = 0
count_10 = 0
for i from 0 to n-2:
if s[i] == s[i+1]:
if s[i] == '0':
count_01 += 1
else:
count_10 += 1
if count_01 % 2 == 1 or count_10 % 2 == 1:
return -1
count_01 = 0
count_10 = 0
for i from 0 to n-1:
target_01 = '01'[i % 2]
target_10 = '10'[i % 2]
if s[i] != target_01:
count_01 += 1
if s[i] != target_10:
count_10 += 1
return min(count_01, count_10)
Minimum Changes To Make Alternating Binary String Solution Code
1