LeetCode刷题Medium篇Group Anagrams

题目

Given an array of strings, group anagrams together.

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

Note:

  • All inputs will be in lowercase.
  • The order of your output does not matter.

十分钟尝试

这个我打算用map存储,key为每个字符减去‘a’后的数字相加,这样就可以计算相同的字符对应的内容,value为一个list,存储相同key的字符串。但是有个问题,计算出来的数字,比如5,可能1+4,也可能2+3.所以有问题。这个key的方式有问题,不是唯一的。

但是代码逻辑是ok的。下面上代码,然后再进行修改

class Solution {
    public List> groupAnagrams(String[] arrays) {
        List> list=new  ArrayList();
        Map> map=new HashMap();
        if(arrays.length==0) return list;
        for(int i=0;i tmpList=new ArrayList();
                tmpList.add(curr);
                map.put(count,tmpList);
            }  
        }
        for(Map.Entry entry:map.entrySet()){
            list.add((List)entry.getValue());
        }
        return list;
        
    }
}

如何唯一表示一个 词是另一个的错位词?比如eat和tea是同一个,怎么判断是同一个呢?由于只有26个字母,我设计一个 数组,字符减去‘a’就是数组的索引。把数组的值拼在一起,注意:拼接的时候没有元素的位置之前一定要填充0,不填充不对,默认应该不是0,判断是否相同,这样就可以判断是否是错位词了。

class Solution {
    public List> groupAnagrams(String[] arrays) {
        List> list=new  ArrayList();
        int[]  count=new int[26];
        Map> map=new HashMap();
        if(arrays.length==0) return list;
        for(int i=0;i tmpList=new ArrayList();
                tmpList.add(curr);
                map.put(key,tmpList);
            }  
        }
        for(Map.Entry entry:map.entrySet()){
            list.add((List)entry.getValue());
        }
        return list;
        
    }
}

 

你可能感兴趣的:(架构设计,Leetcode算法)