牛客华为算法-HJ14 字符串排序

我爱海鲸 2025-04-18 23:41:33 暂无标签

简介华为OD、冒泡排序

字符串排序_牛客题霸_牛客网

描述

对于给定的由大小写字母混合构成的 n 个单词,输出按字典序从小到大排序后的结果。

从字符串的第一个字符开始逐个比较,直到找到第一个不同的位置,通过比较这个位置字符对应的 Ascii 码( A<⋯<Z<a<⋯<z )得出字符串的大小,称为字典序比较。

输入描述:

第一行输入一个整数 n(1≦n≦1000) 代表给定的单词个数。
此后 n 行,每行输入一个长度 1≦length(s)≦100 ,由大小写字母混合构成的字符串 s ,代表一个单词。

输出描述:

输出 n 行,每行输出一个字符串,代表排序后的结果。第一行输出字典序最小的单词。
解法一(java):
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        List<String> list = new ArrayList<>();
        int a = in.nextInt();
        while (in.hasNext()) { // 注意 while 处理多个 case
            String str = in.next();
            list.add(str);
        }
        int size = list.size();
        for (int i = 0 ; i < size; i++) {
            for (int j = 0 ; j < size - i -1 ; j++) {
                String tmp1 = list.get(j);
                String tmp2 = list.get(j+1);
                if (exchange(tmp1,tmp2)) {
                    list.set(j,tmp2);
                    list.set(j+1,tmp1);
                }
            }
        }
        for (String s : list) {
            System.out.println(s);
        }
    }

    public static boolean exchange(String one,String two) {
        int oneLen = one.length();
        int twoLen = two.length();
        int len = oneLen > twoLen ? twoLen : oneLen;
        for (int i = 0; i < len; i++) {
            int c1 = one.charAt(i);
            int c2 = two.charAt(i);
            if (c1 > c2) {
                return true;
            } else if (c2 > c1) {
                return false;
            }
        }   
        return oneLen > twoLen;
    }
}

思路:先将数据放到一个集合中,然后冒泡排序,交换字符串的值,但是要注意交换的方法,容易出错。

解法二(java)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        in.nextLine(); // 消耗换行符
        List<String> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add(in.nextLine());
        }
        Collections.sort(list); // 默认字典序升序
        for (String s : list) {
            System.out.println(s);
        }
    }
}
  • 优先用 Collections.sort(),避免手写冒泡排序。

  • 字典序规则String.compareTo() 已内置实现,直接调用即可。

你好:我的2025