字符串调整为RGB的顺序

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

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

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

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

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

 当 k与j相遇后中止字符串

  
  
  
  
  1. #include<iostream>  
  2. using namespace std;  
  3. void f(char * str)  
  4. {    
  5.     int length=strlen(str);  
  6.     int i=0;  
  7.     int j=length-1;  
  8.     int k=0;  
  9.     while(k<=j)  
  10.     {  
  11.     //  当发现是R时,与前面的 i 指的对像交换,i后移 ;  
  12.         if(str[k]=='R')  
  13.         {  
  14.             char tmp=str[i];  
  15.             str[i]=str[k];  
  16.             str[k]=tmp;  
  17.             i++;  
  18.           
  19.         }  
  20.         //当发现是B时,与后面的 j指的对像交换,j前移  
  21.         else if(str[k]=='B')  
  22.         {  
  23.             char tmp=str[j];  
  24.             str[j]=str[k];  
  25.             str[k]=tmp;  
  26.             j--;  
  27.         }  
  28.         else 
  29.             k++;  
  30.     }  
  31. }  
  32.  
  33. void main()  
  34. {  
  35.     char str[]="GRGBRBGBBRRGBRBG";  
  36.     cout<<str<<endl;  
  37.  
  38.     f(str);  
  39.     cout<<str<<endl;  
相关文章
相关标签/搜索