给定一个01串(仅由‘ 0’或‘1’组成的字符串),如今想把这个数字串排序成“非递减”有序序列,请问至少须要多少次交换(随意两个位置交换)?
输入描写叙述:
输入数据第一行是一个正整数T(T<=100),表示有T组測试数据。
接下来的T行。每行给出01串。
数据保证——
50%的字符串长度在[1,100 ]
95%的字符串长度在[1,10000]
100%的字符串长度在[1,1000000]
输出描写叙述:
对于每组測试数据,请输出排成“非递减有序序列”的最小交换次数。
每组输出占一行。
输入样例:
3
01
10
110
输出样例:
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 <cstring>
#include <string>
using namespace std;
void swap(char* lhs, char* rhs)
{
char temp=*lhs;
*lhs=*rhs;
*rhs=temp;
}
int main()
{
int T,len,l,r,i,j;
string s;
cin>>T;
while(T--)
{
cin>>s;
len=s.length();
j=0;
l=0;
r=len-1;
while(l<r)
{
while('0'==s[l])
l++;
while('1'==s[r])
r--;
if(l<r)
{
++j;
swap(&s[l],&s[r]);
}
}
cout<<j<<endl;
}
return 0;
}