Hiccup
发布于 2025-11-11 / 4 阅读
0
0

算法刷题-Day06_2021110

算法刷题-Day06_2021110

字符串排序

知识点 字符串 排序

描述

对于给定的由可见字符和空格组成的字符串,按照下方的规则进行排序:

  • 按照字母表中的顺序排序(不区分大小写);

  • 同一字母的大小写同时存在时,按照输入顺序排列;

  • 非字母字符保持原来的位置不参与排序;

直接输出排序后的字符串。

字符串由 ASCII 码在 32 到 126 范围内的字符组成。您可以参阅下表获得其详细信息。

输入描述:

在一行上输入一个长度为 1≦length(s)≦10001≦length(s)≦1000 ,由上表中的字符组成的字符串 s 。

输出描述:

输出一个字符串,代表按照规则排序后的字符串。

示例1

输入:

BabA

输出:

aABb

示例2

输入:

Hello NowCoder!

输出:

CdeeH llNooorw!

作答

import java.util.*;
​
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String str = in.nextLine();
        int len = str.length();
        char[] result = new char[len]; // 存储最终结果
        for (int i = 0; i < len; i++) {
            char c = str.charAt(i);
            int num = (int) c;
            if (num < 65 || (num > 90 && num < 97) || num >122) {
                result[i] = c;
                System.out.println(c);
            }
        }
        String s = str.toUpperCase();
        char[] arr = s.toCharArray();
        Arrays.sort(arr);
        String st = String.valueOf(arr);
        System.out.println(result);
        for (int i = 0; i < len; i++) {
            char c = str.charAt(i);
            String upC = String.valueOf(c).toUpperCase();
            int num = (int) c;
            if (num < 65 || (num > 90 && num < 97) || num >122) {
                continue;
            }
            int index = st.indexOf(upC);
            while (index < len) {
                if (result[index] == '\0') {
                    break;
                }
                index++;
            }
            result[index] = c;
        }
        
        // 输出结果
        System.out.println(new String(result));
    }
}

方法存在缺陷:+s()gsF)H

解题思路:

  • 筛选非字母字符,记住其顺序;

  • 将字母统一转为大写或小写,进行排序;

  • 根据字母的顺序,并插入非字母;

知识点:

  • 排序的方法(各种数据结构的比较、排序方法)、思路;

  • Character 的使用;

待续---



评论