如何将给定字符串数组中的不同字谜组合在一起?
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.sort
或 Collections.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 的相应变体作为值。
我有一个问题。所以假设我有大约 10 种不同的字符串类型,我需要编写一个方法,根据字符串是否是字谜,将它们组合在一起。解决这个问题的最佳方法是什么?二维数组?
我显然还有其他方法可以比较字符串并确定它们是否是变位词。这个问题只是问我如何解决不同组中不同字符串排序的问题。
列表示例: -狗 -面包 -非洲 -上帝 -Dreab -dGO -对待 -达布尔 -率 -中国
第 1 组:狗,上帝,dGO
第 2 组:Bread, Dreab, dabre
第 3 组:非洲
第 4 组:治疗、治疗
第 5 组:中国
一种方法是创建一个 Map<String,List<String>>
。相同字母的所有字谜排序到相同的排序 string
。因此该字符串将是您打开地图的关键。 List
部分将是实际的字谜。
所以粉刺和手杖会是
acen => [痤疮、手杖]
要对字谜进行排序,您需要将字符串拆分为字母,然后使用 Arrays.sort
或 Collections.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 的相应变体作为值。