码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode][49] Group Anagrams

时间:2018-09-17 21:29:05      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:stringbu   ++   相同   att   转换   class   oge   sci   public   

49. 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.

解析

对字符串分类,把含有相同字母的字符串聚合到一起。第一时间想到要用HashMap,但是要把什么作为key呢?想到把字符串的字符按照ascii码的大小排序再转换为String作为Key。

参考答案(自己写的)

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> map = new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            char[] chars = strs[i].toCharArray();
            Arrays.sort(chars);
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < chars.length; j++) {
                sb.append(chars[j]);
            }
            String key = sb.toString();
            if (map.containsKey(key)) {
                map.get(key).add(strs[i]);
            } else {
                List<String> str = new ArrayList<>();
                str.add(strs[i]);
                map.put(key, str);
            }
        }
        List<List<String>> res = new ArrayList<>(map.values());
        return res;
    }
}

效率还不错。注意几个api的运用,在做算法题的时候经常用到,一个是toCharArray()把字符串转换成字符数组,一个是Arrays.sort()对字符串排序。

[leetcode][49] Group Anagrams

标签:stringbu   ++   相同   att   转换   class   oge   sci   public   

原文地址:https://www.cnblogs.com/ekoeko/p/9664901.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!