1. 程式人生 > >Leetcode 49. Group Anagrams

Leetcode 49. Group Anagrams

ring val har logs 應用 upa inpu ont urn

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: All inputs will be in lower-case.

遍歷一遍strs,碰到的每個字符串後先拆解成字符數組,然後按照字典順序排序,之後組裝為string類型的字符串

判斷字符串是否出現在map中,若在,將拆解組裝之前的字符串存入相應map 的 list中

map集合中各個key對應的value就是由相同字母組成的字符串

public class Solution {
    //第一次 一次提交 一次AC
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> ansli  = new ArrayList<List<String>>();
        HashMap<String,List<String>> map = new HashMap<String,List<String>>();
        for(int i=0;i<strs.length;i++){
            char [] c = strs[i].toCharArray();
            Arrays.sort(c);
            String str = String.valueOf(c);
            if( map.containsKey(str) ){
                List<String> list = map.get( str );
                list.add( strs[i] );
            }
            else{
                List<String> list = new ArrayList<String>();
                ansli.add(list); //既然對於應用型數據添加的應用的地址,添加之後對於應用的修改,對所有有該引用類型的地值
                                 //的,list都有效,就不用在通過遍歷map 來實現了,替代了下方註釋的部分
                list.add( strs[i] );
                map.put(str,list);
            }
        }
        //遍歷map
        // Iterator<HashMap.Entry<String, List<String>>> entries = map.entrySet().iterator();
        // while (entries.hasNext()) {
        //     Map.Entry<String, List<String>> entry = entries.next();
        //     ansli.add(entry.getValue());
        // }
        return ansli;
    }
}

Leetcode 49. Group Anagrams