49. 字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
--解题思路--
由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。
--解题代码--
public List<List<String>> groupAnagrams(String[] strs) { //在内容相同情况下,String会hash得到相同的key, // 由于char[]特殊机制,相同内容的在hash后值不会相同。 // 因此Map中必须使用String作为key Map<String,List<String>> map = new HashMap<>(); for(String str:strs){ char[] ch = str.toCharArray(); Arrays.sort(ch); String key = new String(ch); //当Map集合中有这个key时,就使用这个key值,如果没有就使用默认值defaultValue // String address = map.getOrDefault("address", "北京"); // System.out.println(address);// 北京,map中不存在address,使用默认值“北京” List<String> list = map.getOrDefault(key,new ArrayList<String>()); list.add(str); map.put(key,list); } return new ArrayList<>(map.values()); }
--写在后面的话--
Java Map集合笔记
1.概念
Map 是一种键-值对(key-value)集合,Map集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。
Map 接口主要有两个实现类:HashMap 类和TreeMap类。其中,HashMap类按哈希算法来存取键对象,而TreeMap类可以对键对象进行排序。
2.常用方法
//当Map集合中有这个key时,就使用这个key值,如果没有就使用默认值defaultValue String address = map.getOrDefault("address", "北京"); System.out.println(address);// 北京,map中不存在address,使用默认值“北京”