题目

题目解析
其实就是字符排序,但它有两注意点:
- 不区分大小写
- 不区分大小写的前提下,小写字母在大写字母前面
解题思路
思路1
把小写字母 变成 大写字母 在利于 asii 码 比较大小。
小写字母 怎么变成 大写字母?
'小写字母' - ('a' - 'A'),就能得到小写字母对应的大写字母。
思路1的java代码
class Test {
public static void main(String[] args) {
System.out.println(sort("3Ba1cA"));
}
public static void swop(char[] chars, int i, int j) {
char c = chars[i];
chars[i] = chars[j];
chars[j] = c;
}
public static String sort(String str) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
for (int j = i + 1; j < chars.length; j++) {
if ((chars[i] < 'a' && chars[j] < 'a') || (chars[i] >= 'a' && chars[j] >= 'a')) {
if (chars[i] > chars[j]) {
swop(chars, i, j);
}
}
if ((chars[i] < 'a' && chars[j] >= 'a')) {
char c = (char) (chars[j] - ('a' - 'A'));
if (chars[i] >= c) {
swop(chars, i, j);
}
}
if ((chars[i] >= 'a' && chars[j] < 'a')) {
char c = (char) (chars[i] - ('a' - 'A'));
if (c > chars[j]) {
swop(chars, i, j);
}
}
}
}
return new String(chars);
}
}

思路2
建立字母的对应关系
- 0 > 0
- 1 > 1
- 2 > 2
- 3 > 3
- 4 > 4
- 5 > 5
- 6 > 6
- 7 > 7
- 8 > 8
- 9 > 9
- a > 10
- A > 11
- b > 12
- B > 13
- ...
将字母变成数字后再排序,然后在变回来