F_JustWei's Studio.

5760. 构成交替字符串需要的最小交换次数

字数统计: 366阅读时长: 1 min
2021/05/16 Share

5760. 构成交替字符串需要的最小交换次数

给你一个二进制字符串 s ,现需要将其转化为一个 交替字符串 。请你计算并返回转化所需的 最小 字符交换次数,如果无法完成转化,返回 -1

交替字符串 是指:相邻字符之间不存在相等情况的字符串。例如,字符串 "010""1010" 属于交替字符串,但 "0100" 不是。

任意两个字符都可以进行交换,不必相邻

示例 1:

1
2
3
输入:s = "111000"
输出:1
解释:交换位置 1 和 4:"111000" -> "101010" ,字符串变为交替字符串。

示例 2:

1
2
3
输入:s = "010"
输出:0
解释:字符串已经是交替字符串了,不需要交换。

示例 3:

1
2
输入:s = "1110"
输出:-1

提示:

  • 1 <= s.length <= 1000
  • s[i] 的值为 '0''1'

C++代码:

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
class Solution {
public:
int minSwaps(string s) {
int n = s.size();
//第一种为:0101....
//第二种为:1010....
int a0 = 0, a1 = 0, b0 = 0, b1 = 0;
for (int i = 0; i < n; i++) {
if (i & 1) {
if (s[i] != '1') {
a1++;
}
else {
b0++;
}
}
else {
if (s[i] != '0') {
a0++;
}
else {
b1++;
}
}
}

if (a0 != a1 && b0 != b1) {
return -1;
}
if (a0 == a1 && b0 != b1) {
return a0;
}
if (a0 != a1 && b0 == b1) {
return b0;
}
return min(a0, b0);
}
};
CATALOG
  1. 1. 5760. 构成交替字符串需要的最小交换次数
    1. 1.0.1. 示例 1:
    2. 1.0.2. 示例 2:
    3. 1.0.3. 示例 3:
    4. 1.0.4. 提示:
    5. 1.0.5. C++代码: