描述
一般我们在对字符串排序时,都会按照字典序排序。当字符串只包含小写字母时,相当于按字母表"abcdefghijklmnopqrstuvwxyz"的顺序排序。
现在我们打乱字母表的顺序,得到一个26个字母的新顺序。例如"bdceafghijklmnopqrstuvwxyz"代表'b'排在'd'前,'d'在'c'前,'c'在'e'前……
给定N个字符串,请你按照新的字母顺序对它们排序。
输入
第一行包含一个整数N。(1 <= N <= 1000)
第二行包含26个字母,代表新的顺序。
以下N行每行一个字符串S。 (|S| <= 100)
输出
按新的顺序输出N个字符串,每个字符串一行。
5 bdceafghijklmnopqrstuvwxyz abcde adc cda cad ddc样例输出
ddc cda cad abcde adc
不得不说。写ACM还是C++最舒服。JAVA的字符串修改 用char 排序得用String,转来转去的好麻烦。有没有大佬有方便的办法的求教啊。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int n;
static int[] ma=new int[26];
static int[] jie=new int[26];
static String a=new String();
static char[][] b=new char[1005][105];
static String[] ans=new String[1005];
public static void main(String args[]) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
a=in.next();
for(int i=0;i<a.length();i++) {
ma[i]=a.charAt(i)-'a';
jie[a.charAt(i)-'a']=i;
}
for(int i=0;i<n;i++) {
a=in.next();
b[i]=a.toCharArray();
for(int j=0;j<b[i].length;j++) {
b[i][j]=(char)(jie[b[i][j]-'a']+'a');
}
ans[i]=String.valueOf(b[i]);
}
Arrays.sort(ans,0,n);
for(int i=0;i<n;i++) {
b[i]=ans[i].toCharArray();
for(int j=0;j<b[i].length;j++) {
b[i][j]=(char)(ma[b[i][j]-'a']+'a');
}
System.out.println(b[i]);
}
}
}