题解HJ14 | #字符串排序#
字符串排序
https://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int a = in.nextInt(); String[] arr = new String[a]; for (int i = 0; i < a; i++) { arr[i] = in.next(); } //排序 for (int i = 0; i < a - 1; i++) { for (int j = 0; j < a - i - 1; j++) { int cout = 0; compare: for (int k = 0; k < arr[j].length() && k < arr[j + 1].length(); k++) { if (arr[j].charAt(k) > arr[j + 1].charAt(k)) { String tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; break compare; } else if (arr[j].charAt(k) < arr[j + 1].charAt(k))break compare; else if (arr[j].charAt(k) == arr[j + 1].charAt(k)) { cout++; } if (cout == arr[j + 1].length()) { String tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; break compare; } } } } //输出 for (int i = 0; i < a; i++) { System.out.println(arr[i]); } } }
这次是字符串排序,要按照字典顺序排,第一步依然是构建一个字符串数组,将输入的字符串载入到字符串数组中
这次给了数量,所以先定义一个int型去获取数量,之后用一个for循环去载入这个字符串数组
int a = in.nextInt();
String[] arr = new String[a];
for (int i = 0; i < a; i++) {
arr[i] = in.next();
}
之后就是排序,字典排序有以下需求
按照字符顺序排列,从第一个字符依次比较下去,如果字符一样,字符少的排前面,所以我设计了三个if
for (int i = 0; i < a - 1; i++) {//还是排序的思想,按照冒泡排序的方式做的排序
for (int j = 0; j < a - i - 1; j++) {
int cout = 0;
compare:
for (int k = 0; k < arr[j].length() && k < arr[j + 1].length(); k++) {
if (arr[j].charAt(k) > arr[j + 1].charAt(k)) {//如果大就交换然后退出·
String tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
break compare;
} else if (arr[j].charAt(k) < arr[j + 1].charAt(k))break compare;//如果小就交换,也要退出,不然会出现第一个小,第二个大然后交换的情况
else if (arr[j].charAt(k) == arr[j + 1].charAt(k)) {//如果一样就进行计数
cout++;
}
if (cout == arr[j + 1].length()) {//如果计数器和后一个字符串长度一样,那么证明后面的短,也要交换
String tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
break compare;
}
}
}
}
最后输出字符串数组
for (int i = 0; i < a; i++) {
System.out.println(arr[i]);
}
#华为od题库#随便发发而已