lintcode-49-字符大小写排序

49-字符大小写排序

给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序。

注意事项

小写字母或者大写字母他们之间不一定要保持在原始字符串中的相对位置。

样例

给出"abAcD",一个可能的答案为"acbAD"

挑战

在原地扫描一遍完成

标签

LintCode 版权所有 字符串处理 排序 两根指针

思路

定义两个指针low和high,low从左至右遍历字符串,high从右自左遍历字符串,
1.当low指向大写字母时,停止遍历;否则向右继续遍历
2.当high指向小写字母时,停止遍历;否则向左继续遍历
3.当low<high时,交换2个指针指向的内容,low++,high--
4.当low<high时,继续步骤1

code

class Solution {
public:
    /** 
     * @param chars: The letters array you should sort.
     */
    void sortLetters(string &letters) {
        // write your code here
        int low = 0, high = letters.size()-1;

        while(low < high) {
            while(letters[low]<='z' && letters[low]>='a') {
                low++;
            }
            while(letters[high]<='Z' && letters[high]>='A') {
                high--;
            }
            if(low < high) {
                char temp = letters[low];
                letters[low] = letters[high];
                letters[high] = temp;
                low++;
                high--;
            }
        }
    }
};
posted @ 2017-06-27 13:49  LiBaoquan  阅读(543)  评论(0编辑  收藏  举报