igt 三色排序问题

给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。
要求:空间复杂度是O(1),且只能遍历一次字符串。
http://write.blog.youkuaiyun.com/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--;         
   }   
}

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值