要求:空间复杂度是O(1),且只能遍历一次字符串。
#include<iostream>
using namespace std;
int SortRGB(char *, int );
void main(){
char str[]="RGBGRRGBRGBR";
SortRGB(str, strlen(str));
cout<<str<<endl;
system("pause");
}
void swap(char *left,char *right){
char ch=*left;
*left=*right;
*right=ch;
}
int SortRGB(char *str, int len){
if(str == NULL || len<=0)
return -1;
int begin=0,cur=0,end=len-1;
while(str[end] == 'B')
end--;
while(cur<=end){
if(str[cur] == 'R'){
swap(&str[begin], &str[cur]);
begin++;
cur++;
}else if(str[cur] == 'B'){
swap(&str[cur],&str[end]);
end--;
}else{
cur++;
}
}
return 0;
}