题目:给出一组字符串,把 字母相同顺序不同的词 分成一类
例如,给出: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
返回:
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
思路:对数组遍历,取出每个字符串进行排序,将排序过后相同的字符串作为Map的key传入,然后value传入排序之前的字符串的集合。
代码:
public List<List<String>> groupAnagrams(String[] strs) {
//若输入为空则直接返回
if (strs == null || strs.length == 0) return new ArrayList<List<String>>();
Map<String, List<String>> map = new HashMap<String, List<String>>();
Arrays.sort(strs);
for (String s : strs) {
char[] c = s.toCharArray();
//取出每个字符串进行排序
Arrays.sort(c);
String keyStr = String.valueOf(c);
//排序过后相同的字符串作为Map的key传入
if (!map.containsKey(keyStr)) map.put(keyStr, new ArrayList<String>());
//value传入排序之前的字符串的集合
map.get(keyStr).add(s);
}
return new ArrayList<List<String>>(map.values());
}