我有个问题。因此,假设我有大约10种不同的字符串类型,我需要编写一个方法,根据字符串是否为字形,将它们分组在一起。最好的方法是什么?二维数组?
显然,我还有其他方法可以比较字符串并确定它们是否是字谜。这个问题只是想问我如何解决这个问题,即在不同的组中对不同的字符串进行排序。
列表示例:-Dog -Bread -Africa -God -Dreab -dGO -Treat -dabre -trate -China
组1:狗,神,dGO
组2:面包,Dreab,dabre
第三组:非洲
第4组:处理,处理
第五组:中国
发布于 2019-09-29 07:46:11
一种方法是创建一个Map<String,List<String>>。相同字母的所有字形都排序到相同的排序string。因此,该字符串将是映射的关键字。List部分将是实际的字谜。
所以粉刺和拐杖
acen =>粉刺,手杖
要对字形进行排序,需要将字符串拆分为字母,然后使用Arrays.sort或Collections.sort。然后把这些字母放回原处。
发布于 2020-12-27 19:44:10
基于上述答案的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;
}在这里,anagram将是映射,它将以排序形式的anagram单词的键值对作为键,并将该anagram的相应变体作为值。
https://stackoverflow.com/questions/58150969
复制相似问题