Group Anagrams

package cn.edu.xidian.sselab.hashtable;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 *
 * @author zhiyong wang
 * title: Group Anagrams
 * content:
 * 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:
 *
 *     For the return value, each inner list's elements must follow the lexicographic order.
 *     All inputs will be in lower-case.
 *
 *
 */
public class GroupAnagrams {
    //参考大神的做法,自己没有想到可以用map作为容器进行存储,key为排序之后的一个串,value就是这个串对应的list
    //因为每个子list要求是排序的,所以第一步,先对strs里面所有的字符串进行排序,这样添加到每个list里面的就是排好序的
    public List<List<String>> groupAnagrams(String[] strs){
        if(strs == null || strs.length == 0) return new ArrayList<List<String>>();
        Arrays.sort(strs);
        Map<String,List<String>> map = new HashMap<String,List<String>>();
        for(int i=0;i<strs.length;i++){
            String temp = strs[i];
            char[] beforeSort = temp.toCharArray();
            Arrays.sort(beforeSort);
            String afterSort = String.valueOf(beforeSort);
            if(!map.containsKey(afterSort)) map.put(afterSort, new ArrayList<String>());                
                map.get(afterSort).add(temp);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

posted on 2016-02-20 23:42  wzyxidian  阅读(175)  评论(0编辑  收藏  举报

导航