Anagram排序最后一步

时间:2014-08-21 05:10:02

标签: java algorithm sorting

我试图进行字谜排序,直到这里我才这样做:

我对string中的每个array进行了排序,并将其存储到hashmap中。

现在我有一个带键的字符串作为字符串,其值为该字符串的字谜。

以下是代码:

public static void anagramSort(String[] s){

        HashMap<String, Set<String>> h=new HashMap<String, Set<String>>();
        String temp[]=new String[s.length];
        Set<String> result=new LinkedHashSet<String>();
        for(int i=0;i<s.length;i++){    

            char[] c=s[i].toCharArray();
            Arrays.sort(c);
            temp[i]=new String(c);

            if(h.containsKey(temp[i])){
                Set<String> s1=new TreeSet<String>();
                s1.addAll(h.get(temp[i]));
                s1.add(s[i]);
                h.put(temp[i], s1);
            }
            else{
                Set<String> s2=new TreeSet<String>();
                s2.add(s[i]);
                h.put(temp[i], s2);
            }
        }
        System.out.println(h);
    }

现在我想将hashmap的所有这些值放入字符串数组或集合中,以便所有的字谜都在一起。

我试图将它们(在hashmap中的值)放在一个集合中,但它变得越来越笨拙。

真诚地感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以遍历values()并将其收集到List

Map<String, Set<String>> h = ...; // The map created in the OP

List<String> allAnagrams = new LinkedList<>();
for (Set<String> anagrams : h.values()) {
    allAnagrams.addAll(anagrams);
}