(HashMap,二维List) LeetCode 49. 字母异位词分组 java

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

示例:

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

说明:

    所有输入均为小写字母。
    不考虑答案输出的顺序。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

用HashMap来存储遍历过程中的结果

 法一:

  只要两个单词的字母排序后相同,则认为他们是同一组的。key为单词字母排列后的组合。

  注意两个return 语句的语法。

执行结果:

通过

显示详情

执行用时 :23 ms, 在所有 Java 提交中击败了73.72% 的用户

内存消耗 :51.8 MB, 在所有 Java 提交中击败了73.58%的用户

 

class Solution {
    public List> groupAnagrams(String[] strs) {
        if (strs.length == 0) return new ArrayList();
        // List> res = new ArrayList >();
        // if (strs.length == 0)
        //     return res;
        Map map = new HashMap();
        for(String s: strs){
            char[] tmp = s.toCharArray();
            Arrays.sort(tmp);
            String key = String.valueOf(tmp);
            if(!map.containsKey(key) )
                map.put(key, new ArrayList<>() );
            map.get(key).add(s);
        }
        return new ArrayList(map.values() );
        
    }
}

法二

每个字母对应一个素数,存储一个一维数组,字母在字母表的位置(当前字母 ch, ch-'a'即可计算出其在字母表的位置)即为数组索引值。

对于每个String,计算其每个字母对应的素数乘积,作为HashMap的key。

代码不再贴出。

你可能感兴趣的:(算法题)