题目描述:大意是给出一些相同长度的字符串,根据这些字符串的逆序数进行排序,输出。
分析:定义一个DNA类,其中包含字符串和该字符串的逆序数两个成员变量,和相关成员函数。对给定的字符串排序,再输出。
AC代码:
import java.util.*;
public class POJ1007 {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int length = s.nextInt();
int num = s.nextInt();
DNA[] dna = new DNA[num];
s.nextLine();//用于跳过换行符
for(int i=0; i<num; i++){
dna[i] = new DNA(s.nextLine());
}
sort(dna);
for(int i=0; i<num; i++){
System.out.println(dna[i].str);
}
s.close();
}
//排序
public static void sort(DNA[] dna){
DNA tmp = new DNA();
for(int i=0; i<dna.length; i++){
for(int j=1; j<dna.length-i; j++){
if(dna[j-1].compare(dna[j])){
tmp.set(dna[j]);
dna[j].set(dna[j-1]);
dna[j-1].set(tmp);
}
}
}
}
}
class DNA{
String str;
int inversion = 0;
DNA(){
this.str = null;
}
DNA(String str){
this.str = str;
//计算出每个DNA的逆序数
count();
}
public void count(){
char ch[] = str.toCharArray();
for(int i=0; i<str.length(); i++){
for(int j=i+1; j<str.length(); j++){
if(ch[i] > ch[j])
inversion++;
}
}
}
public boolean compare(DNA dna){
if(this.inversion >= dna.inversion){
return true;
}
else return false;
}
public void set(DNA d){
this.str = d.str;
this.inversion = d.inversion;
}
}