算法刷题-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 的使用;
待续---