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

[虚拟机OA]Group Anagram 变位词归类

时间:2019-09-12 09:21:57      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:++   class   enc   lis   space   reference   nta   result   string   

Given an array of strings, group anagrams together.

Example:

技术图片
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]
技术图片

 

题意:

给定一堆单词,把变位词放一块儿去。

 

碎碎念:

开始想说“eat” 转charArray {‘e‘, ‘a‘, ‘t‘}

“tea” 转charArray {‘t‘, ‘e‘, ‘a‘}

这样,我就错误的蜜汁以为以上charArray是相等的!

于是用一个Map<char[],  List<Integer>> map 来边扫input 边更新map。 

为何要用List<Integer> ? 我蜜汁绕弯的想将index存下,最后再取出index对应的input string。 (自己都翻白眼啊!)

 

正确且高效的改进是,

sort “eat” 转charArray {‘e‘, ‘a‘, ‘t‘}  为字典排序 {‘a‘, ‘e‘, ‘t‘} 

sort “tea” 转charArray {‘t‘, ‘e‘, ‘a‘}  为字典排序 {‘a‘, ‘e‘, ‘t‘} 

   

Map<String,  List<String>> map 来存 <变位词sort后的同一结果,  各种可能的变位词>

 

Solution1:  HashMap

(1) convert each string to charArray, sort such charArray to make sure anagrams has uniform reference

(2) hashmap 

(3) get all map.values()

 

code

技术图片
/*
Time: O(n).  We traverse the input array
Space: O(n). We allocate a hashmap 
*/
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> result = new ArrayList<>();
        // corner case
        if(strs ==null) return result;
        
        Map<String,List<String>> map = new HashMap<>();   
        
        for(int i = 0; i< strs.length; i++){
            char [] curr = strs[i].toCharArray();
            Arrays.sort(curr);  // to make sure anagrams has uniform reference
            String key = String.valueOf(curr); 
            if(!map.containsKey(key)){
                map.put(key,new ArrayList<String> ());
            }
            map.get(key).add(strs[i]);    
        }
        for(List<String> list : map.values()){        //   可以直接简写成
            result.add(new ArrayList<>(list));       //        ||
        }                                           //         \/
        return result;                             //    return new ArrayList<>(map.values);
    }
}
技术图片

[虚拟机OA]Group Anagram 变位词归类

标签:++   class   enc   lis   space   reference   nta   result   string   

原文地址:https://www.cnblogs.com/liuliu5151/p/11509800.html

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