一、题目

编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。

点击查看原题
难度级别:中等

二、思路

1)hashmap+排序

本题也是需要善于使用数据结构,就可以快速解出
变位词的特征是字符出现次数相同的词,那么,所有变位词进行排序后组成的字符串是相等的(字符串内容相等,hashcode也是相等的),可以利用这个原理使用hashmap将变位词放在一起

三、代码

1)hashmap+排序

  1. class Solution {
  2. public List<List<String>> groupAnagrams(String[] strs) {
  3. var map = new HashMap<String, List<String>>();
  4. for (String str : strs) {
  5. char[] cs = str.toCharArray();
  6. Arrays.sort(cs);
  7. String ts = String.valueOf(cs);
  8. if (!map.containsKey(ts)) {
  9. map.put(ts, new ArrayList<String>());
  10. }
  11. map.get(ts).add(str);
  12. }
  13. var ans = new ArrayList<List<String>>();
  14. for (List<String> values : map.values()) {
  15. ans.add(values);
  16. }
  17. return ans;
  18. }
  19. }

字符串最大长度为C,时间复杂度为O(n*ClogC),空间复杂度为O(nC)