题目主要信息

1、对字符串进行处理

2、将字符串按照ASCII码的顺序进行排列

方法一:排序

具体方法

本题实际上是一道排序问题,输入为一个字符串,将字符串中的每个字符按照ASCII码排序,我们可以进行简化,将其转化为一个数组,即对数组进行排序。 由于是按照ASCII码排序,我们可以直接调用排序函数,也可以自己手写排序。

Java代码

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String s = sc.nextLine();
          //转为字符数组
            char[] array = s.toCharArray();
          //使用sort进行拍下
            Arrays.sort(array);
          //记录结果
            String ans = new String(array);
            System.out.println(ans);
        }
    }
}

复杂度分析

  • 时间复杂度:Arrays.sort()函数基于快速排序,平均为O(nlog2(n))O(nlog_2(n)),最坏为O(n2)O(n^2)
  • 空间复杂度:O(log2(n))O(log_2(n))

方法二:哈希表

具体方法

由于在本题中,使用的图标包括"A"到"Z"、"a"到"z"、"0"到"9",我们完全可以通过使用一个哈希表来记录该字符串,然后进行输出。

Java代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String s = sc.nextLine();
            int[] hash = new int[128];
          //记录每个字符出现的次数
            for(char c : s.toCharArray()){
                hash[c]++;
            }
          //记录最终的结果
            StringBuilder sb = new StringBuilder();
          //遍历存入结果中
            for(int i=0; i<hash.length; i++){
                while(hash[i]-- > 0){
                    sb.append((char)i);
                }
            }
            String ans = sb.toString();
            System.out.println(ans);
        }
    }
}

复杂度分析

  • 时间复杂度:O(n)O(n),单层循环
  • 空间复杂度:O(1)O(1),只需要固定长度的hash数组