题目主要信息
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()函数基于快速排序,平均为,最坏为
- 空间复杂度:
方法二:哈希表
具体方法
由于在本题中,使用的图标包括"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);
}
}
}
复杂度分析
- 时间复杂度:,单层循环
- 空间复杂度:,只需要固定长度的hash数组