leetcode探索数组(一)

设计键

哈希映射可以很好地按键分组信息。但是我们不能直接使用原始字符串作为键。我们必须设计一个合适的键来呈现字母异位词的类型。例如,有字符串 “eat” 和 “ate” 应该在同一组中。但是 “eat” 和 “act” 不应该组合在一起。

字母异位词分组

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

代码:

class Solution {
    public List> groupAnagrams(String[] strs) {
        List> list = new ArrayList>();
        int len = strs.length;
        if(len<1){
            return list;
        }
        Map> map = new HashMap<>();//key=排好序的字符 value = 相同字母的list集合
        String temp = "";
        for(int i=0;i l = new ArrayList<>();
                l.add(strs[i]);
                map.put(temp,l);
            }
        }
        for(String key:map.keySet()){
            list.add(map.get(key));
        }
        return list;
    }
}

参考:https://blog.csdn.net/xushiyu1996818/article/details/83617934

补充:

1  Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,非常的好用。

但是sort()的参数有好几种,基本上是大同小异,下面是以int型数组为例的Arrays.sort()的典型用法

增序排列:
int[] ints=new int[]{2,324,4,57,1};
Arrays.sort(ints);
降序排列:(依赖Comparator)
Integer[] integers=new Integer[]{2,324,4,4,6,1};
Arrays.sort(integers, new Comparator(){
      public int compare(Integer o1, Integer o2){
           return o2-o1;
           }
        }});
数组的指定位排序:
int[] ints2=new int[]{212,43,2,324,4,4,57,1};
//对数组的[2,6)位进行排序
Arrays.sort(ints2,2,6);

2  

采用HashMap>,每次将读入的字符串在map中查找(这里需将读入的字符串转化成数组后用sort()来排列好)。

用sort后的字符串作为key,把sort后相同的字符存到字符串集合的list作为value。

最后遍历hashmap,把value添加到结果集中

你可能感兴趣的:(LeetCode)