字符串調整爲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相遇後停止

  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;  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章