【プログラミング問題】01列並べ替え


タイトル
01列(「0」または「1」からなる文字列のみ)を指定し、この数字列を「非減算」シーケンスに並べ替えたいのですが、少なくとも何回交換する必要がありますか?入力説明:入力データの最初の行は正の整数T(T<=100)で、Tグループのテストデータがあることを示します.次のT行は、各行に01列が与えられる.データ保証:50%の文字列長が[1100]95%の文字列長が[110000]100%の文字列長が[110000]
≪出力の説明|Output Description|oem_src≫:テスト・データのセットごとに、「≪非減算順序|Non-Reduction Order|oem_src≫」に並べられた最小交換回数を出力します.出力のグループごとに1行を占めます.
入力例:3 01 10 110
出力例:0 1
ぶんせき
高速ソートの考え方を用いて,2つのポインタiとj,iを用いて左から右へ走査し,jを右から左へ走査した.左が1に、右が0に遭遇したときに交換します.
コード#コード#
#include <iostream>
#include <string>
using namespace std;
int func(string str){
    int len = str.length();
    int i = 0, j = len-1;
    int cnt = 0;
    while(i < j){
        while(i < j && str.at(i) == '0') i++;
        while(i < j && str.at(j) == '1') j--;
        if(i < j){//             ,        。
            i++;
            j--;
            cnt++;
        }
    }
    return cnt;
}
int main(){
    int T;
    cin >> T;
    while(T--){
        string str;
        cin >> str;
        cout << func(str) << endl;
    }
    return 0;
}