链接:
https://leetcode.com/problems/group-anagrams/
大意:
给一个字符串数组,要求你把字符串满足以下规则的字符串进行归类。规则为:若两个字符串含有相同的字符,则为一类(不要求字符位置相同)。另:字符串中的字符都是小写字母。例子:
思路:
若两个字符串含有相同的字符,则为一类。也就是若两个字符串为一类,则这两个字符串按照字符的字典顺序排序后,应该是相同的。因此,可以使用一个map,map的key为每一类字符串它们按字典序排序后的字符串,key对应的value即为那些经过字典排序后可以变为key的string组成的list。最后把每个key对应的list添加到需要返回的res中。
代码:
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> res = new ArrayList<>();
if (strs.length == 0)
return res;
Map<String, LinkedList<String>> map = new HashMap<>();
for (String str : strs) {
char[] array = str.toCharArray();
Arrays.sort(array);
String strSorted = new String(array);
if (!map.containsKey(strSorted)) {
LinkedList<String> list = new LinkedList<>();
list.addLast(str);
map.put(strSorted, list);
} else {
map.get(strSorted).addLast(str);
}
}
for (String k : map.keySet()) {
res.add(map.get(k));
}
return res;
}
}
结果:
结论:
程序 = 算法(思路,思想) + 数据结构