[leetcode][49] Group Anagrams
Posted ekoeko
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode][49] Group Anagrams相关的知识,希望对你有一定的参考价值。
49. Group Anagrams
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
Note:
- All inputs will be in lowercase.
- The order of your output does not matter.
解析
对字符串分类,把含有相同字母的字符串聚合到一起。第一时间想到要用HashMap,但是要把什么作为key呢?想到把字符串的字符按照ascii码的大小排序再转换为String作为Key。
参考答案(自己写的)
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String, List<String>> map = new HashMap<>();
for (int i = 0; i < strs.length; i++) {
char[] chars = strs[i].toCharArray();
Arrays.sort(chars);
StringBuilder sb = new StringBuilder();
for (int j = 0; j < chars.length; j++) {
sb.append(chars[j]);
}
String key = sb.toString();
if (map.containsKey(key)) {
map.get(key).add(strs[i]);
} else {
List<String> str = new ArrayList<>();
str.add(strs[i]);
map.put(key, str);
}
}
List<List<String>> res = new ArrayList<>(map.values());
return res;
}
}
效率还不错。注意几个api的运用,在做算法题的时候经常用到,一个是toCharArray()把字符串转换成字符数组,一个是Arrays.sort()对字符串排序。
以上是关于[leetcode][49] Group Anagrams的主要内容,如果未能解决你的问题,请参考以下文章