给定一个字符串里面只有"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--;
}
}
之前还看到拓展情况,比如四色,四个字符的该如何处理