如何将给定字符串数组中的不同字谜组合在一起?

How do I group different anagrams together from a given string array?

我有一个问题。所以假设我有大约 10 种不同的字符串类型,我需要编写一个方法,根据字符串是否是字谜,将它们组合在一起。解决这个问题的最佳方法是什么?二维数组?

我显然还有其他方法可以比较字符串并确定它们是否是变位词。这个问题只是问我如何解决不同组中不同字符串排序的问题。

列表示例: -狗 -面包 -非洲 -上帝 -Dreab -dGO -对待 -达布尔 -率 -中国

第 1 组:狗,上帝,dGO

第 2 组:Bread, Dreab, dabre

第 3 组:非洲

第 4 组:治疗、治疗

第 5 组:中国

一种方法是创建一个 Map<String,List<String>>。相同字母的所有字谜排序到相同的排序 string。因此该字符串将是您打开地图的关键。 List 部分将是实际的字谜。

所以粉刺和手杖会是

acen => [痤疮、手杖]

要对字谜进行排序,您需要将字符串拆分为字母,然后使用 Arrays.sortCollections.sort。然后把字母放回原处。

Java 代码基于上述答案。

    Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
    List<String> words = new ArrayList<String>(strs.length);
    words.addAll(Arrays.asList(strs));
    for(String str:words){
        char[] word = str.toCharArray();
        Arrays.sort(word);
        String sortedWord = new String(word);
        
        if(anagrams.containsKey(sortedWord)){
            anagrams.get(sortedWord).add(str);
        }
        else{
           anagrams.put(sortedWord, new ArrayList<String>(Arrays.asList(str))); 
        }
        
    }
    List<List<String>> output = new ArrayList<List<String>>();
    for(Map.Entry<String, List<String>> entry:anagrams.entrySet()){
        output.add(entry.getValue());
    }
    return output;
}

这里的 anagrams 将是一个映射,它将排序形式的 anagram 词的键值对作为键,并将该 anagram 的相应变体作为值。