【面试题 10.02】变位词组

题目

题目链接

编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。

注意:本题相对原题稍作修改
示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

说明:

所有输入均为小写字母。
不考虑答案输出的顺序。

解题思路

将字符串排序和当前字符串在数组中的位置一起加入hashmap中 若hashmap之前没有排序后的元素则将当前位置作为第一个结果,若hashmap之前有排序后的元素则将当前的位置追加到位置集合中。

代码

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        String[] now = strs;
        HashMap<String, List<Integer>> hashMap = new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            char[] chars = strs[i].toCharArray();
            Arrays.sort(chars);
            String temp = String.valueOf(chars);
            //若hashmap之前没有排序后的元素则将当前位置作为第一个结果
            if (hashMap.get(temp) == null) {
                List<Integer> list = new ArrayList<>();
                list.add(i);
                hashMap.put(temp, list);
            } else {  //若hashmap之前有排序后的元素则将当前的位置追加到位置集合中
                List<Integer> list = hashMap.get(temp);
                list.add(i);
                hashMap.put(temp, list);
            }
        }

        //结果集
        List<List<String>> answers = new ArrayList<>();
        for (String key : hashMap.keySet()) {
            List<String> answer = new ArrayList<>();
            List<Integer> list = hashMap.get(key);
            for (int n : list) {
                answer.add(now[n]);
            }
            answers.add(answer);
        }

        return answers;
    }
}

【面试题 10.02】变位词组_第1张图片

你可能感兴趣的:(#,leetcode)