给定一个01串(仅由‘ 0’或‘1’组成的字符串),现在想把这个数字串排序成“非递减”有序序列,请问至少需要多少次交换(任意两个位置交换)?
输入:
3
01
10
110
输出:
0
1
1
#include<iostream>
#include<string.h>
using namespace std;
const int N=1e6+131;
char a[N];
int num;
int main()
{
int T;
cin>>T;
while(T--) {
num=0;
cin>>a;
int len=strlen(a);
for(int i=0;i<len;i++) {
if(a[i]=='1') num++;
}
int p=len-num;
num=0;
for(int i=0;i<p;i++)
{
if(a[i]=='1') num++;
}
cout<<num<<endl;
}
}
解析:求出数字串中’0’的个数p,在前p个数中找出’1’的个数,就是至少要交换的次数。