题目 https://leetcode-cn.com/problems/group-anagrams/
思路
定义一个map<String,List<String>>,然后遍历数组,对每一个字符串进行排序(从a---z递增),排序后的字符串作为key存到map的keyset中,将排序后相同的字符串放到key对应的value的集合中。
代码
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String, List<String>> map = new HashMap<>();
Set<String> keyList;//
for (int i = 0; i < strs.length; i++) {
keyList = map.keySet();
String key = sortStr(strs[i]);
if (!keyList.contains(key)) {
List<String> values = new ArrayList<>();
values.add(strs[i]);
map.put(key, values);
} else {
map.get(key).add(strs[i]);
}
}
List<List<String>> result = new ArrayList<>();
for (String key :
map.keySet()) {
result.add(map.get(key));
}
return result;
}
private String sortStr(String str) {
List<String> list1 = new ArrayList<>();
for (int i = 0; i < str.length(); i++) {
list1.add(String.valueOf(str.charAt(i)));
}
Collections.sort(list1);
StringBuffer buffer = new StringBuffer();
for (String ss :
list1) {
buffer.append(ss);
}
return buffer.toString();
}
image.png
网友评论