原题网址:https://www.lintcode.com/problem/sort-letters-by-case/description
描述
给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序。
小写字母或者大写字母他们之间不一定要保持在原始字符串中的相对位置。
您在真实的面试中是否遇到过这个题? 是
样例
给出"abAcD",一个可能的答案为"acbAD"
挑战
在原地扫描一遍完成
标签
排序
两根指针
字符串处理
LintCode 版权所有
思路:
参照插入排序法,设置两根指针i、j,一个指向左侧调整好的小写字母区末位的下一个位置,另一个指向待处理区域的第一个元素。
如果待处理元素为小写字母,将其放到 i 处,i 处元素放到 j 处,i 向右移动一位,j 向右移动一位。
如果待处理元素不为小写字母,继续处理下一位,即 i 不动,j 向右移动一位。
AC代码:
class Solution { public: /* * @param chars: The letter array you should sort by Case * @return: nothing */ void sortLetters(string &chars) { // write your code here int n=chars.size(); int i=0;//小写字母区末位的下一个位置; for (int j=0;j<n;j++) { if (chars[j]>='a'&&chars[j]<='z') { swap(chars[i],chars[j]); i++; } } } };
其他方法: