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());
    }
}

猜你喜欢

转载自blog.csdn.net/Sunshine_liang1/article/details/83302723
今日推荐