华为机试牛客刷题之HJ14 字符串排序
HJ14 字符串排序
描述
对于给定的由大小写字母混合构成的 n 个单词,输出按字典序从小到大排序后的结果。
从字符串的第一个字符开始逐个比较,直到找到第一个不同的位置,通过比较这个位置字符对应的(A<⋯<Z<a<⋯<z )得出字符串的大小,称为字典序比较。
输入描述:
第一行输入一个整数 n(1≦n≦1000) 代表给定的单词个数。
此后 n 行,每行输入一个长度 1≦length(s)≦100 ,由大小写字母混合构成的字符串 s ,代表一个单词。
输出描述:
输出 n 行,每行输出一个字符串,代表排序后的结果。第一行输出字典序最小的单词。
示例1
输入:
11
cap
to
cat
card
two
too
up
boat
boot
AA
Aa
输出:
AA
Aa
boat
boot
cap
card
cat
to
too
two
up
思路是读取输入的多行字符串,首行为数字表示后续字符串数量,剩余行存入数组。通过冒泡排序将字符串按字典序升序排列。compareTo() 方法区分大小写(大写字母排在小写字母之前)。
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
int len = Integer.parseInt(in.nextLine());
String[] datas = new String[len];
for(int k=0;k<len;k++){
datas[k] = in.nextLine();
}
for(int i=0;i<len;i++){
for(int j=0;j<len-i-1;j++){
if(datas[j].compareTo(datas[j+1]) > 0){
String temp = datas[j];
datas[j] = datas[j+1];
datas[j+1] = temp;
}
}
}
for(int k=0;k<len;k++){
System.out.println(datas[k]);
}
}
}
}