要求:
Please use javascript (or your favorite programming language) to write a
function that do the following.
Given an array of strings, return an array of arrays of strings that
groups all anagrams.
An anagram is a word that has the same letters, but in different positions.
i.e. given ["cars", "thing", "scar", "dog", "god", "arcs", "the"]
return [["cars", "scar", "arcs"], ["thing"], ["dog", "god"], ["the"]]
大体意思就是:用你熟悉的语言,将上面给出的数据 分成 下面的样子。
给出的单词可以是其他的单词。
思路: 既然是相同单词的不同位置,那么里面所含有的字母应该是一样的。所以想到将已有单词进行先排序(可以是从A-Z),
然后单词相同的为同一组的元素。
废话不多说 看代码:
importjava.util.ArrayList;importjava.util.Arrays;importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;importjava.util.Map.Entry;/***
*@authorguannan
**/
public classTestPr {static HashMap> strArr = new HashMap>();public static voidmain(String[] args) {
ArrayList ar = new ArrayList();//添加要处理的数组
ar.add("cars");
ar.add("thing");
ar.add("scar");
ar.add("dog");
ar.add("god");
ar.add("arcs");
ar.add("the");//排序活的要得到分组集合
syoArr(ar);//打印集合元素
showArr(strArr);
}private static void showArr(HashMap>strArr2) {//方法一:加强for//for (Map.Entry> entry : strArr2.entrySet()) {//System.out.println("key :" + entry.getKey());//for (int i = 0; i < entry.getValue().size(); i++) {//System.out.println(entry.getValue().get(i));//}//}//方法二:普通遍历
Iterator i =strArr2.entrySet().iterator();while(i.hasNext()){
Entry entry=(Entry)i.next();
System.out.println("key :" +entry.getKey());
ArrayList value = (ArrayList) entry.getValue();for (int k = 0; k
System.out.println(value.get(k));
}
}
}public static void syoArr(ArrayListarr) {
ArrayList ar2 = new ArrayList();
HashMap ha = new HashMap();for (int i = 0; i < arr.size(); i++) {
String stringByOrder=getStringByOrder(arr.get(i).toCharArray());if(ha.containsKey(stringByOrder)) {
ArrayList arrayList =strArr.get(stringByOrder);
arrayList.add(arr.get(i));
strArr.put(stringByOrder, arrayList);
}else{
ha.put(stringByOrder, arr.get(i));
ArrayList ar1 = new ArrayList();
ar1.add(arr.get(i));
strArr.put(stringByOrder, ar1);
}
}
}public static String getStringByOrder(char[] oldChar) {
Arrays.sort(oldChar);returnString.valueOf(oldChar);
}
}
最后的输出结果:
key :eht
the
key :ghint
thing
key :dgo
dog
god
key :acrs
cars
scar
arcs
==========================================
一些小的技巧 献丑献丑