百度2015春季实习生招聘附加题_01排序
给定一个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; }