题目
给定一个01串(仅由‘ 0’或‘1’组成的字符串),现在想把这个数字串排序成“非递减”有序序列,请问至少需要多少次交换(任意两个位置交换)?
输入描述:
输入数据第一行是一个正整数T(T<=100),表示有T组测试数据;
接下来的T行,每行给出01串。
数据保证——
50%的字符串长度在[1,100 ]
95%的字符串长度在[1,10000]
100%的字符串长度在[1,1000000]
输出描述:
对于每组测试数据,请输出排成“非递减有序序列”的最小交换次数。
每组输出占一行。
输入例子:
3
01
10
110
输出例子:
0
1
1
#include <iostream>
#include <string>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
string input;
cin>>input;
int i = 0;
int j = input.size()-1;
int result = 0;
while(i<=j){
if(input[i]=='0')
++i;
else if(input[j]=='1')
--j;
else{
++result;
++i;
--j;
}
}
cout<<result<<endl;
}
return 0;
}