中級_3) 字符串“字謎分組

給定一個字符串數組,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字符串。

示例:

輸入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
輸出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]

說明:
所有輸入均爲小寫字母。
不考慮答案輸出的順序。

思想:map的key存儲排好序的字符串,value 是相同字符種類的集合,比如key=aet,value={eat,tea,ate}

public class GroupAnagrams {
    public static List<List<String>> groupAnagrams(String[] strs) {

        if(strs==null||strs.length==0)
            return new ArrayList<List<String>>();

        HashMap<String,List<String>>map=new HashMap<>();

        for(String s:strs){//["eat", "tea", "tan", "ate", "nat", "bat"]
            char[]ch=s.toCharArray();//e a t
            Arrays.sort(ch);//a e t
            String keyStr=String.valueOf(ch);

            if(!map.containsKey(keyStr))
                map.put(keyStr,new ArrayList<String>());//map的key存儲排好序的字符串,value 是相同字符種類的list集合,比如key=aet,value={eat,tea,ate}
            map.get(keyStr).add(s);

        }
        return new ArrayList<List<String>>(map.values());
    }

/* public static void main(String[] args) {
        String []strs={"eat", "tea", "tan", "ate", "nat", "bat"};
        System.out.println(groupAnagrams(strs));
    }*/
    }

map 存儲結構如下
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章