igt 三色排序问题

来源:互联网 发布:绿萼梅 知乎 编辑:程序博客网 时间:2024/04/24 11:05

给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。
要求:空间复杂度是O(1),且只能遍历一次字符串。
http://write.blog.csdn.net/postedit 在july大牛的博客中第八节有这个问题的答案。

做题的时候感觉如果要是两个字符排序,就是快排中的一趟,两个指针就搞定了,但是三个字符也想到可能要用三个指针,但是不知道具体怎么移动,看了july的博客恍然大悟,感觉好简单呀,具体思路如下:

一前begin,一中current,一后end,俩俩交换。

1、current遍历,整个数组序列,current指1不动,
2、current指r,与begin交换,而后current++,begin++,
3、current指b,与end交换,而后,current不动,end--。

三个指针分别控制rgb三种颜色的位置,开始begin current指向第一个,end指向最后一个

while( current<=end )     
{          
  if( array[current] ==‘r’ )          
   {              
      swap(array[current],array[begin]);               
      current++;               
      begin++;         
   }          
   else if( array[current] == ‘g’ )         
   {              
      current++;         
   }
         
   else //When array[current] =‘b’
   {            
      swap(array[current],array[end]);             
      end--;         
   }   
}

之前还看到拓展情况,比如四色,四个字符的该如何处理

原创粉丝点击