JavaStudy:字符串排序

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 {

    @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函数

 

你可能感兴趣的:(JavaStudy:字符串排序)