JavaStudy:字符串排序
总时间限制:
1000ms
内存限制:
65536kB
描述
现在有一些长度不等的字符串(只由26个大写字母组成),请将它们按照逆序对的数量多少排序。
逆序对指的是字符串A中的两个字符A[i]、A[j],具有i < j 且A[i] > A[j] 的性质。如字符串”ATCG”中,T和C是一个逆序对,T和G是另一个逆序对,这个字符串的逆序对数为2。
字符的大小按照字母表的ASCII值大小来比较。
输入
第1行:1个整数m表示字符串数量,且0 < m <= 100。
第2至m+1行:每行是一个字符串,字符全为大写,长度不超多50。
可能会有重复的字符串出现。
输出
按逆序对数从少到多输出字符串,逆序对数一样多的字符串按照输入的顺序输出。
样例输入
3 ACBCDEFG GFEDCBA AEDEFG
样例输出
ACBCDEFG AEDEFG GFEDCBA
代码
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception{
Scanner sc=new Scanner(System.in);
int n = sc.nextInt();
String[] ss=new String[n];
for (int i = 0; i < n; i++) {
ss[i]=sc.next();
}
Arrays.sort(ss,new C1());
for(String s:ss){
System.out.println(s);
}
}
}
class C1 implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return nxs(o1)-nxs(o2);
}
int nxs(String s){//求逆序对个数
int len=s.length();
int sum=0;
for (int i = 0; i < len - 1; i++) {
for (int j = i+1; j < len; j++) {
if(s.charAt(i)>s.charAt(j)){
sum++;
}
}
}
return sum;
}
}
思路
利用Comparator将数组重新排序
知识
Comparator
创建C1类实现Comparator接口再利用数组排序Arrays.sort(Object,C1),其中Comparator接口需要实现compare函数
465

被折叠的 条评论
为什么被折叠?



