LeetCode:49. Group Anagrams(Medium)

1. 原题链接

https://leetcode.com/problems/group-anagrams/description/

2. 题目要求

给定一个字符串数组,将数组中包含相同字母的元素放在同一个列表,例如:

注意:所有的字母都是小写

3. 解题思路

首先对数组中的每个字符串按字母进行排序,这样含有相同字母的字符串排序后可以视作相等。

同时利用HasMap,将排序后的字符串作为key,排序前的作为value进行存储。最后返回HashMap的value即可。

4. 代码实现

import java.util.*;

public class GroupAngrams49 {
    public static void main(String[] args) {
        String[] group = {"eat", "tea", "tan", "ate", "nat", "bat"};
        List<List<String>> res = groupAnagrams(group);
        for(List l:res){
            System.out.print(l.toString());
            System.out.println();
        }

    }

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

  运行结果:

 

posted @ 2018-01-17 09:30  一只敲码的猫  阅读(220)  评论(0编辑  收藏  举报