Java 按字母排列排序
我正在尝试实现一种排序算法,它根据给定的字母排列对单词列表进行排序。(例如,如果给定排列“zyxwvutsrqponmlkjihgfedcba”和单词列表“ant,bear,cat,zoo,animal”,我的算法将返回“zoo,cat,bear,ant,animal”),我可以想出一种方法,将单词的每个字母与另一个单词的字母进行比较,但这会花费很长时间。是否有一种优化的方法来实现此算法,以便更快地对单词进行排序?您可以使用HashMap实现自定义比较器:Java 按字母排列排序,java,algorithm,sorting,alphabetical-sort,Java,Algorithm,Sorting,Alphabetical Sort,我正在尝试实现一种排序算法,它根据给定的字母排列对单词列表进行排序。(例如,如果给定排列“zyxwvutsrqponmlkjihgfedcba”和单词列表“ant,bear,cat,zoo,animal”,我的算法将返回“zoo,cat,bear,ant,animal”),我可以想出一种方法,将单词的每个字母与另一个单词的字母进行比较,但这会花费很长时间。是否有一种优化的方法来实现此算法,以便更快地对单词进行排序?您可以使用HashMap实现自定义比较器: import java.util.*;
import java.util.*;
public class Main {
public static class PermutationComparator implements Comparator<String> {
private final Map<Character, Integer> order;
public PermutationComparator(String permutation) {
this.order = new HashMap<Character, Integer>();
for (int i = 0; i < permutation.length(); i++) {
order.put(permutation.charAt(i), i);
}
}
private int getOrder(char c) {
Integer value = order.get(c);
if (value == null) return -1;
return value;
}
@Override
public int compare(String o1, String o2) {
for (int i = 0; i < Math.min(o1.length(), o2.length()); i++) {
int compare = Integer.compare(getOrder(o1.charAt(i)), getOrder(o2.charAt(i)));
if (compare != 0) return compare;
}
return Integer.compare(o1.length(), o2.length());
}
}
public static void main(String... args) {
String[] strings = {"ant", "bear", "cat", "zoo", "animal"};
Arrays.sort(strings, new PermutationComparator("zyxwvutsrqponmlkjihgfedcba"));
System.out.println(Arrays.toString(strings));
}
}
如果希望不区分大小写,请使用:
Integer value = order.get(Character.toLowerCase(c));
首先尝试一下……据我所知,您可以使用hashmap保存以前的进程,以避免再次计算以前的进程检查
String.compareTo()的实现方式,并用自定义权重替换字符代码
Integer value = order.get(Character.toLowerCase(c));