对于任意两个字符串
- 若
- 若存在整数
容易发现,上述排序方法的排序结果是唯一的。
第一行输入一个字符串,包含个互不相同的小写字母。记
表示字母
是该字符串的第
个字符,则字母
小于等于字母
当且仅当
。
第二行输入一个整数,表示待排序字符串的数量。
接下来行,每行一个仅包含小写字母的字符串
,表示一个待排序的字符串。
按照排序后字符串位置下标从小到大的顺序输出行,每行一个字符串,表示排序的结果。
abcdefghijklmnopqrstuvwxyz 3 aaa aac aaaa
aaa aaaa aac
zyxwvutsrqponmlkjihgfedcba 3 aaa aac aaaa
aac aaa aaaa
strlist = input().strip()
dic = {}
for i, c in enumerate(strlist):
dic[c] = i + 1
n = int(input().strip())
strings = []
for _ in range(n):
strings.append(input().strip())
strings.sort(key=lambda s: [dic.get(c, 0) for c in s])
for s in strings:
print(s) import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String letters = in.next();
char[] lettersArray = letters.toCharArray();
int[] letterWeight = new int[1024];
for(int j = 0; j < lettersArray.length; j++) {
int charValue = lettersArray[j];
letterWeight[charValue] = j;
}
int n = in.nextInt();
int i = 0;
String[] strArray = new String[n];
while(i < n) {
strArray[i] = in.next();
i++;
}
Arrays.sort(strArray, new Comparator<String>() {
public int compare(String a, String b) {
int ret = 0;
int len = Math.min(a.length(), b.length());
for (int i = 0; i < len; i++) {
int v1 = letterWeight[a.charAt(i)];
int v2 = letterWeight[b.charAt(i)];
ret = v1 - v2;
if (ret != 0) {
return ret;
}
}
return a.length() - b.length();
}
});
for (String item : strArray) {
System.out.println(item);
}
// 注意 hasNext 和 hasNextLine 的区别
// while (in.hasNextInt()) { // 注意 while 处理多个 case
// int a = in.nextInt();
// int b = in.nextInt();
// System.out.println(a + b);
// }
}
} public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 构建等级表
String str = sc.next();
Map<Character,Integer> rank = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
rank.put(str.charAt(i),i);
}
// 添加需排序的字符串
int num = sc.nextInt();
List<String> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
list.add(sc.next());
}
// 进行排序
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
int len1 = s1.length();
int len2 = s2.length();
int minLen = Math.min(len1, len2);
// 比较每个字符
for (int i = 0; i < minLen; i++) {
char c1 = s1.charAt(i);
char c2 = s2.charAt(i);
int rank1 = rank.get(c1);
int rank2 = rank.get(c2);
if (rank1 != rank2) {
return rank1 - rank2;
}
}
// 如果前面的字符都相同,则长度短的在前
return len1 - len2;
}
});
// 输出结果
for (String s : list) {
System.out.println(s);
}
}
}