Fork me on GitHub

LeetCode 49 Group Anagrams(字符串分组)

 
Problem:给一个字符串数组,将其中的每个字符串进行分组,要求每个分组中的各个字符串所包含的字母都相同对字母的前后顺序没有要求!
 
 
 
使用 Map<String, List<String>> map 进行求解
 
给定的字符串数组为 String[] strs
1、当strs为空时返回new ArrayList<List<String>>();
2、否则,定义上述的map,对strs数组中的每一个元素s进行判断
3、首先将s转换为char数组  char[] ca = s.toCharArray();
4、对ca进行排序操作, Arrays.sort(ca)
5、将ca再转为String strKey (此时的strKey每一个字符顺序满足字典序排列即最小的那一个顺序) 
6、判断当前map中是否包含ca,如果不包含,则map.put(keyStr, new ArrayList<String>()); 
7、然后将当前的s放入对应的keyStr所对应的List中去
8、最终的返回结果为new ArrayList<List<String>>(map.values())  传参数为map.values
 
参考代码:
package leetcode_50;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/***
 * 
 * @author pengfei_zheng
 * 将字符串数组进行分组操作
 */
public class Solution49 {
    public List<List<String>> groupAnagrams(String[] strs) {
        if (strs == null || strs.length == 0) return new ArrayList<List<String>>();
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        for (String s : strs) {
            char[] ca = s.toCharArray();
            Arrays.sort(ca);
            String keyStr = String.valueOf(ca);
            if (!map.containsKey(keyStr)) map.put(keyStr, new ArrayList<String>());
            map.get(keyStr).add(s);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

 

posted @ 2017-03-14 14:22  伊甸一点  阅读(473)  评论(0编辑  收藏  举报