题解HJ14 | #字符串排序#

字符串排序

https://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        String[] arr = new String[a];
        for (int i = 0; i < a; i++) {
            arr[i] = in.next();
        }
        //排序
        for (int i = 0; i < a - 1; i++) {
            for (int j = 0; j < a - i - 1; j++) {
                int cout = 0;
                compare:
                for (int k = 0; k < arr[j].length() && k < arr[j + 1].length(); k++) {
                    if (arr[j].charAt(k) > arr[j + 1].charAt(k)) {
                        String tmp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = tmp;
                        break compare;
                    } else if (arr[j].charAt(k) < arr[j + 1].charAt(k))break compare;
                    else if (arr[j].charAt(k) == arr[j + 1].charAt(k)) {
                        cout++;
                    }
                    if (cout == arr[j + 1].length()) {
                        String tmp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = tmp;
                        break compare;
                    }
                }
            }
        }
        //输出
        for (int i = 0; i < a; i++) {
            System.out.println(arr[i]);
        }
    }
}

这次是字符串排序,要按照字典顺序排,第一步依然是构建一个字符串数组,将输入的字符串载入到字符串数组中

这次给了数量,所以先定义一个int型去获取数量,之后用一个for循环去载入这个字符串数组

int a = in.nextInt();

String[] arr = new String[a];

for (int i = 0; i < a; i++) {

arr[i] = in.next();

}

之后就是排序,字典排序有以下需求

按照字符顺序排列,从第一个字符依次比较下去,如果字符一样,字符少的排前面,所以我设计了三个if

for (int i = 0; i < a - 1; i++) {//还是排序的思想,按照冒泡排序的方式做的排序

for (int j = 0; j < a - i - 1; j++) {

int cout = 0;

compare:

for (int k = 0; k < arr[j].length() && k < arr[j + 1].length(); k++) {

if (arr[j].charAt(k) > arr[j + 1].charAt(k)) {//如果大就交换然后退出·

String tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

break compare;

} else if (arr[j].charAt(k) < arr[j + 1].charAt(k))break compare;//如果小就交换,也要退出,不然会出现第一个小,第二个大然后交换的情况

else if (arr[j].charAt(k) == arr[j + 1].charAt(k)) {//如果一样就进行计数

cout++;

}

if (cout == arr[j + 1].length()) {//如果计数器和后一个字符串长度一样,那么证明后面的短,也要交换

String tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

break compare;

}

}

}

}

最后输出字符串数组

for (int i = 0; i < a; i++) {

System.out.println(arr[i]);

}

#华为od题库#
华为OD笔试库讲解,JAVA版 文章被收录于专栏

随便发发而已

全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务