华为笔试一道算法题

468 阅读1分钟

题目

题目解析

其实就是字符排序,但它有两注意点:

  1. 不区分大小写
  2. 不区分大小写的前提下,小写字母在大写字母前面

解题思路

思路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
  • ...

将字母变成数字后再排序,然后在变回来