49. 字母异位词分组https://leetcode.cn/problems/group-anagrams/
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs =["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
本人答案
CV
官方解析
由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String,List<String>> map=new HashMap<String,List<String>>();
for(String str:strs){
char[] array=str.toCharArray();
Arrays.sort(array);
String key=String.valueOf(array);
List<String> list=map.getOrDefault(key,new ArrayList<String>());
list.add(str);
map.put(key,list);
}
return new ArrayList<List<String>>(map.values());
}
}
Java知识复习
Java char[]数组转成String类型
- 使用 String 类的 valueOf() 方法
valueOf(char[] data): 返回 char 数组参数的字符串表示形式。String key=String.valueOf(array); //示例 public class Test { public static void main(String args[]) { char[] arr = {'h', 'e', 'l', 'l', 'o' }; System.out.println("返回值 : " + String.valueOf(arr) ); } } //输出 返回值:hello
- 使用 Character 类的 toString() 方法
toString() 方法用于返回一个表示指定 char 值的 String 对象。结果是长度为 1 的字符串,仅由指定的 char 组成。public class Test { public static void main(String args[]) { System.out.println(Character.toString('a')); System.out.println(Character.toString('A')); } }
- 直接将字符数组作为参数构造String对象
public class StringDemo{ public static void main(String args[]){ char[] helloArray = { 'h', 'e', 'l', 'l', 'o'}; String helloString = new String(helloArray); System.out.println( helloString ); } }
Java中HashMap的常用方法
map.getOrDefault(key,new ArrayList<String>())
map寻找key值中有没有被str拿到后重新排序后的“key”,若有则使用该list并下一步向其中添加元素,若无则建立新的以当前“key”为键的新的list,下一步向其中添加元素;
Map<String ,String> map = new HashMap<String ,String>(); HashMap<Character,Integer>map=new HashMap<Character,Integer>(); 1.put(Object key, Object value) //添加键值对 2.putAll(Collection c) //添加指定的映射关系到目标映射关系 3.get(Object key) //根据键来获取对应的值 4.getOrDefault(Object key, V defaultValue) //map中存在key则使用对应的value,否则使用defaultValue 4.containsKey(Object key) //是否有指定key的映射 5.containsValue(Object value) //是否有指定value的映射 6.remove(Object key) //删除该键值对 7.values() //返回所有值,返回形式为Collection 8.isEmpty() //测试映射是否为空 10.size() //返回大小