package Level3;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Set;
/**
* Anagrams
* Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
*
*/
public class S49 {
public static void main(String[] args) {
}
public ArrayList anagrams(String[] strs) {
ArrayList ret = new ArrayList();
// 用排序过的string作为key,它的anagram作为ArrayList
Hashtable> ht = new Hashtable>();
for(int i=0; i val = ht.get(sorted);
if(val != null){
val.add(strs[i]);
}else{
val = new ArrayList
();
val.add(strs[i]);
ht.put(sorted, val);
}
}
// Hashtable的循环方法 keySet
Set set = ht.keySet();
// 把所有anagram添加到ret中
for(String s : set){
ArrayList val = ht.get(s);
if(val.size() > 1){
ret.addAll(val);
}
}
return ret;
}
public String sorted(String a){
char[] achar = a.toCharArray();
Arrays.sort(achar);
return new String(achar);
}
}
题目的意思是给一个String数组,找出其中由相同字母组成的单词。
例如:
S = ["abc", "bca", "bac", "bbb", "bbca", "abcb"]
答案为:
["abc", "bca", "bac", "bbca", "abcb"]
只有"bbb"没有相同字母组成的单词。