您的位置:首页 > 其它

字符串调整为RGB的顺序

2016-03-16 22:26 302 查看
字符串调整为RGB的顺序

题目:一个字符串只有‘R’、‘G’、‘B’组成,如何让所有的‘R’出现在前面,所有的‘G’在中间,所有的‘B’在最后。

要求:要求空间复杂度为O(1),只许遍历一遍字符串数组

思路:维护三个游标 i、j、k

i 指向开始, j 指向尾部,用于分别插入 R 、B

k 用于遍历,当发现是R时,与前面的 i 指的对象交换,i 后移;

当发现是B时,与后面的 j指的对象交换,j前移

当 k与j相遇后停止


#include

using namespace std;

void f(char * str)

{

int length=strlen(str);

int i=0;

int j=length-1;

int k=0;

while(k<=j)

{

// 当发现是R时,与前面的 i 指的对像交换,i后移 ;

if(str[k]=='R')

{

char tmp=str[i];

str[i]=str[k];

str[k]=tmp;

i++;

}

//当发现是B时,与后面的 j指的对像交换,j前移

else if(str[k]=='B')

{

char tmp=str[j];

str[j]=str[k];

str[k]=tmp;

j--;

}

else

k++;

}

}

void main()

{

char str[]="GRGBRBGBBRRGBRBG";

cout<<str<<endl;

f(str);

cout<<str<<endl;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: