磁盘的容量单位常用的有M,G,T这三个等级,它们之间的换算关系为1T = 1024G,1G = 1024M,
现在给定n块磁盘的容量,请对它们按从小到大的顺序进行稳定排序,
例如给定5块盘的容量,1T,20M,3G,10G,6T,3M12G9M排序后的结果为20M,3G,3M12G9M,1T,10G6T。
注意:单位可以重复出现,上述3M12G9M表示的容量即为3M+12G+9M,和12M12G相等。
示例 1:
输入
3
1G
2G
1024M
输出
1G
1024M
2G
说明
1G和1024M容量相等,稳定排序要求保留它们原来的相对位置,故1G在1024M之前。
示例 2:
输入
3
2G4M
3M2G
1T
输出
3M2G
2G4M
1T
说明
1T的容量大于2G4M,2G4M的容量大于3M2G
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int num = Integer.parseInt(sc.nextLine());
List<String> list = new ArrayList<>();
//将比较的字符储存到list。然后重写list的排序
for (int i = 0 ; i < num ; i++) {
list.add(sc.nextLine());
}
list.sort(new Comparator<String>() {
@Override
public int compare(String str1, String str2) {
return count(str1) - count(str2);
}
});
for (String ss : list) {
System.out.println(ss);
}
}
}
public static int count(String str) {
int sum = 0;
String[] strs = str.toUpperCase().split("[A-Z]");
int length = 0;//储存每个字符中字母所在的位置
for (int i = 0 ; i < strs.length ; i++) {
length += strs[i].length();
char c = str.charAt(length);
int num = Integer.parseInt(strs[i]);
switch (c) {
case 'M':
sum += num ;
break;
case 'G' :
sum += num * 1024;
break;
case 'T' :
sum += num * 1024 * 1024;
break;
}
length++;
}
return sum;
}
}