把它放在一个'真正的'java编程上下文中(即我们使用一些现有的和基本的jdk util类,我认为下面的方法可能会给这个主题带来另一个有趣的方面(即“如何对一个字符串数组进行排序,每个字符串旁边都有字谜其他”):
(a) 我们定义了一个比较器来判断两个字符串是否是字谜;(b) 我们使用 Arrays.sort(array,comparator) 对数组进行排序;
下面是代码和结果(这个想法可以在第 9 章看到,例如 Gayle Laakmann 的“破解编码面试”)
import java.util.Arrays;
import java.util.Comparator;
public class SolutionForSortArraysByAnagrams {
public static void main(String[] args){
String[] strArray = new String[]{"abets","mates","baste","meats", "betas","beast", "steam", "tames", "beats", "teams"};
sortArraysByAnagrams(strArray);
for(String str : strArray){
System.out.println(str);
}
}
private static void sortArraysByAnagrams(String[] strArray) {
Arrays.sort(strArray, new AnagramComparator());
}
}
class AnagramComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
//check edge conditions and length
if( s1 == null || s2 == null)
return -1;
if( s1.length() < s2.length())
return -1;
else if ( s1.length() > s2.length())
return 1;
//sort s1 and s2 to compare:
//System.out.println(s1 + " vs " + s2);
return sort(s1).compareTo(sort(s2));
}
private String sort(String s1) {
char[] cArray = s1.toCharArray();
Arrays.sort(cArray);
//System.out.println(" sorted: " + new String(cArray));
return new String(cArray);
}
}
输入:{“abets”、“mates”、“baste”、“meats”、“betas”、“beast”、“steam”、“tames”、“beats”、“teams”};
输出: abets baste betas 野兽击败伙伴肉类蒸汽驯服团队