49. Group Anagrams

来源:互联网 发布:模拟钢琴的软件 编辑:程序博客网 时间:2024/05/01 23:47

Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
Return:

[  ["ate", "eat","tea"],  ["nat","tan"],  ["bat"]]

Note:

  1. For the return value, each inner list's elements must follow the lexicographic order.
  2. All inputs will be in lower-case.

思路:因为要求结果是要按字典序排列的,我们现将这系列字符串按照字典序排列好,省的最后在将每一个list按照字典序排序,然后就是遇到一个新的,就增加一个list,当然也可以用map,这里就是用map实现的

代码如下(已通过leetcode)

public class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
       List<List<String>> lists=new ArrayList<List<String>>();
       List<String> list=null;
       Arrays.sort(strs);
       Map<String,List<String>> map=new HashMap<String,List<String>>();
       for(int i=0;i<strs.length;i++) {
        if(map.containsKey(reorderstring(strs[i]))) {
        map.get(reorderstring(strs[i])).add(strs[i]);
        } else {
        list=new ArrayList<String>();
        list.add(strs[i]);
        map.put(reorderstring(strs[i]),list);
        }
       }
       for(int i=0;i<strs.length;i++) {
        if(map.isEmpty()) break;
        else {
        if(map.containsKey(reorderstring(strs[i]))) {
        lists.add(map.get(reorderstring(strs[i])));
        map.remove(reorderstring(strs[i]));
        }
        }
       }
       
    return lists;
   }


public String reorderstring(String str) {
char[] cc = str.toCharArray();
Arrays.sort(cc);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < cc.length; i++)
sb.append(cc[i]);
return sb.toString();
}
}


0 0
原创粉丝点击