Group Anagrams


Question

Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"],

Solution

一樣,自己有想到跟解答類似的解法,就是用 Map> 來存資料,但自己的邏輯寫的落落長又有錯誤。我的想法是 for (String s : strs),拿出 s 後去跟在 Map 裡面的 key 做比較,為了判斷是不是 Anagram,我選擇用 Set 來處理,但之後發現這個方法不對,原因是有可能你的字串是 abbe,但在 set 裡只會紀錄 abe。解答這邊用了一個巧妙的先把 s 變成 char array,再對他排序,如此就能快速知道他的 anagram

public List<List<String>> groupAnagrams(String[] strs) {
        if (strs.length == 0 || strs == null) {
            return new ArrayList<List<String>>();
        }

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

        for (String s : strs) {
            char[] chars = s.toCharArray();
            Arrays.sort(chars);
            String tempStr = String.valueOf(chars);
            if (!map.containsKey(tempStr)) {
                map.put(tempStr, new ArrayList<String>());
            } 
            map.get(tempStr).add(s);
        }

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

results matching ""

    No results matching ""