20120927-笔试

来源:互联网 发布:python编辑器 知乎 编辑:程序博客网 时间:2024/04/30 09:14

题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。要求:空间复杂度是O(1),且只能遍历一次字符串

方法:这题本质上术语荷兰国旗问题,在下文中,配图来自博客http://blog.csdn.net/v_july_v/article/details/6211155,第八节部分,作者给出了非常详细的介绍,很容易理解。

代码实现:

void sortRGBstring(char sourceArray[]){if(sourceArray == NULL)return;int begin = 0, current = 0, end = strlen(sourceArray)-1;while(current <= end){if(sourceArray[current] == 'R'){char temp = sourceArray[current];sourceArray[current] = sourceArray[begin];sourceArray[begin] = temp;begin++;current++;}else if(sourceArray[current] == 'G'){current++;}else{char temp = sourceArray[current];sourceArray[current] = sourceArray[end];sourceArray[end] = temp;end--;}}return;}

个人想法:受限于只能遍历一次字符串,不然通过常规的两个指针也可以解决。