题目:
描述
给定一个只包含字母的字符串 chars,按照先小写字母后大写字母的顺序进行排序。
对于不同的语言,chars将以不用的形式给出,例如对于字符串 "abc" ,将以下面的形式给出
Java: char[] chars = {'a', 'b', 'c'};
Python:chars = ['a', 'b', 'c']
C++:string chars = "abc";
你需要实现原地算法解决这个问题。
字母不一定要保持在原始字符串中的相对位置。
样例
样例 1:
输入:
chars = "abAcD"
输出:
"acbAD"
解释:
你也可以返回"abcAD"或者"cbaAD"或者其他正确的答案。
样例 2:
输入:
chars = "ABC"
输出:
"ABC"
public class Solution {
/**
* @param chars: The letter array you should sort by Case
* @return: nothing
*/
public void sortLetters(char[] chars) {
// write your code here
int i = 0, j = chars.length - 1;
while(i < j) {
while(i < j && chars[j] >= 'A' && chars[j] <= 'Z') {
j--;
}
while(i < j && chars[i] >= 'a' && chars[i] <= 'z') {
i++;
}
if(i < j) {
swap(chars, i, j);
i++;
j--;
}
}
}
private void swap(char[] ch, int i, int j) {
char tmp = ch[i];
ch[i] = ch[j];
ch[j] = tmp;
}
}