题解 | #牛棚品种分类#
牛棚品种分类
https://www.nowcoder.com/practice/0b6068f804b9426aa737ea8606e8d5c3
- 题目考察的知识点
字符串,哈希表
- 题目解答方法的文字分析
由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。使用哈希表存储每一组字母异位词,哈希表的键为一组字母异位词的标志,哈希表的值为一组字母异位词列表。遍历完strs,将map转换成string[],并排序即为所求的答案
- 本题解析所用的编程语言
java
- 完整且正确的编程代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param strs string字符串一维数组
* @return string字符串一维数组
*/
public String[] groupAnagrams (String[] strs) {
Map<String, List<String>> map = new HashMap<String, List<String>>();
for (String str : strs) {
char[] array = str.toCharArray();
Arrays.sort(array);
String key = new String(array);
List<String> list = map.getOrDefault(key, new ArrayList<String>());
list.add(str);
map.put(key, list);
}
//map转字符串数组
String[] ans = new String[map.size()];
int p= 0;
for(List i:map.values()){
StringBuilder sb = new StringBuilder();
for(int j=0;j<i.size();j++){
sb.append(i.get(j));
if(j!=i.size()-1){
sb.append(",");
}
}
ans[p++]=sb.toString();
}
//按字典序排序
Arrays.sort(ans);
return ans;
}
}