题解 | #字符串排序#

字符串排序

https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            //转成数组
            char[] arr = str.toCharArray();
            //使用数组的常规排序:避开特殊字符,保持大小写
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = 0; j < arr.length - i - 1; j++) {
                    String left = Character.toString(arr[j]).toUpperCase();
                    String right = Character.toString(arr[j + 1]).toUpperCase();
                    // System.out.println(arr[j] + " " + arr[j + 1]);
                    if (!check(arr[j]) && !check(arr[j + 1])) {
                        if (left.charAt(0) > right.charAt(0)) {
                            char ch = arr[j];
                            arr[j] = arr[j + 1];
                            arr[j + 1] = ch;
                        }
                    } else if (!check(arr[j]) && check(arr[j + 1])) {
                        int index = j + 1;
                        //继续向后找到非特殊字符
                        while (index < arr.length && check(arr[index])) {
                            index++;
                        }
                        //不是因为超长退出循环,找到英文字符
                        if (index != arr.length) {
                            right = Character.toString(arr[index]).toUpperCase();
                            if (left.charAt(0) > right.charAt(0)) {
                                char ch = arr[j];
                                arr[j] = arr[index];
                                arr[index] = ch;
                            }
                        }

                    }
                }
            }
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i]);
            }
        }
    }
    public static boolean  check(char a) {
        if (a >= 'a' && a <= 'z' || a >= 'A' && a <= 'Z') {
            return false;
        }
        return true;
    }
}

纯冒泡排序,仅下列条件满足时交换:

a[j] a[j+1] 交换方式

英文字符 非英文字符 j+1作为起点,找到下一个英文字符

英文字符 英文字符 两者均换成大写或小写,进行比较交换

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-18 16:32
quench@0916:一顿操作猛如虎,一看工资2500
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务