1. 程式人生 > >leetcode:(49) Group Anagrams(java)

leetcode:(49) Group Anagrams(java)

題目:

     

Given an array of strings, group anagrams together.

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"]Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

題目分析:

    本題的要求是將各組字元按照字母構成相同與否進行分組,不同字母組合分為一組,然後按照字典順序排序。

   將字串排序,然後將排序後的字元作為hashmap的鍵,沒有排序的字串作為值,
                 如果發現鍵相同,則取出值,並加新的串拼接起來即可
                 最後遍歷map,把字串取出,再把字串變成字元陣列即可,
                 注意字串為空的情況
程式碼如下:

package LeetCode_HashTable;


import java.util.*;
public class GroupAnagrams_49_1023 {
    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<>();
        for (String s : strs) {
            char[] array = s.toCharArray();          //把字串轉換成字元陣列
            Arrays.sort(array);         //將字元陣列進行升序排序
            String temp1 = String.valueOf(array);     //將排序後的字元陣列轉換成字串

            if (!map.containsKey(temp1)) {
                map.put(temp1, new ArrayList<String>()); //如果map裡面不包含temp1鍵,則將其新增到map中,並將其鍵值設定為空
            }
            map.get(temp1).add(s); //找到在map中鍵temp1的鍵值,並將s新增到鍵值裡面

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