1758. Minimum Changes To Make Alternating Binary String #
题目 #
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'
.
题目大意 #
你将得到一个仅包含字符“ 0”和“ 1”的字符串 s
。 在一项操作中,你可以将任何 '0'
更改为 '1'
,反之亦然。 如果两个相邻字符都不相等,则该字符串称为交替字符串。 例如,字符串“ 010”是交替的,而字符串“ 0100”则不是。 返回使 s
交替所需的最小操作数。
解题思路 #
- 简单题。利用数组下标奇偶交替性来判断交替字符串。交替字符串有 2 种,一个是
'01010101……'
还有一个是'1010101010……'
,这两个只需要计算出一个即可,另外一个利用len(s) - res
就是答案。
代码 #
package leetcode
func minOperations(s string) int {
res := 0
for i := 0; i < len(s); i++ {
if int(s[i]-'0') != i%2 {
res++
}
}
return min(res, len(s)-res)
}
func min(a, b int) int {
if a > b {
return b
}
return a
}