思路。

这是一道挺简单的贪心,由于题目中说交换操作免费,所以我们尽量使用交换,不能交换了再用删除。

求要用的钱也很简单,我们用两个变量分别储存字符串中 $0$ 和 $1$ 的个数,然后开始交换,从字符串开头枚举到字符串结尾,如果遇到 $0$,就将 $1$ 的数量减 $1$,反之亦然。

要在每次减之前判断一下数量是否为空,为空就跳出,防止变成负数。

最后要删除的数量就是 $0$ 剩下的数量加 $1$ 剩下的数量。

AC代码。

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
#include<bits/stdc++.h>
using namespace std;
int t,z,o,c;
string s;
int main(){
cin>>t;
while(t--){
c=z=o=0;
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]=='0'){
z++;
}
else o++;
}
for(int i=0;i<s.size();i++){
if(s[i]=='0'){
if(o>0)
o--;
else break;
}
else{
if(z>0){
z--;
}
else break;
}
}
cout<<o+z<<endl;
}
return 0;
}