一、题目
编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。
点击查看原题
难度级别:中等
二、思路
1)hashmap+排序
本题也是需要善于使用数据结构,就可以快速解出
变位词的特征是字符出现次数相同的词,那么,所有变位词进行排序后组成的字符串是相等的(字符串内容相等,hashcode也是相等的),可以利用这个原理使用hashmap将变位词放在一起
三、代码
1)hashmap+排序
class Solution {public List<List<String>> groupAnagrams(String[] strs) {var map = new HashMap<String, List<String>>();for (String str : strs) {char[] cs = str.toCharArray();Arrays.sort(cs);String ts = String.valueOf(cs);if (!map.containsKey(ts)) {map.put(ts, new ArrayList<String>());}map.get(ts).add(str);}var ans = new ArrayList<List<String>>();for (List<String> values : map.values()) {ans.add(values);}return ans;}}
字符串最大长度为C,时间复杂度为O(n*ClogC),空间复杂度为O(nC)
