侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 674 篇文章
  • 累计创建 128 个标签
  • 累计收到 20 条评论

目 录CONTENT

文章目录

【暴力】字母异位词分组

GabrielxD
2022-04-27 / 0 评论 / 0 点赞 / 129 阅读 / 429 字
温馨提示:
本文最后更新于 2022-07-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
## 题目

49. 字母异位词分组


给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

示例 1:

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

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

提示:

  • 1 <= strs.length <= 10^4
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

解题

方法一:暴力

思路

新建一个与字符串数组(sortedStrs),把原字符串数组中每个字符串转成字符数组(charArr),再按照字母 ASCII 码排序,然后组成字符串放入 sortedStrs,这样也能保证 sortedStrs 中字符串与 strs 中用于构建的原字符串下标相同。

遍历 sortedStrs 中每一个字符串,与其他字符串相比,按照 sortedStrs 中相同的字符串的下标把 strs 中的字母异位词放在同一个集合中,然后把所有相同的组组成集合返回。

代码

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        int len = strs.length;
        List<List<String>> ans = new ArrayList<>();
        String[] sortedStrs = new String[len];
        for (int i = 0; i < len; i++) {
            char[] charArr = strs[i].toCharArray();
            Arrays.sort(charArr);
            sortedStrs[i] = new String(charArr);
        }

        for (int i = 0; i < len; i++) {
            String s = sortedStrs[i];
            if (s.equals("A")) {
                continue;
            }
            List<String> commons = new ArrayList();
            commons.add(strs[i]);
            for (int j = i + 1; j < len; j++) {
                if (s.equals(sortedStrs[j])) {
                    commons.add(strs[j]);
                    sortedStrs[j] = "A";
                }
            }
            ans.add(commons);
        }

        return ans;
    }
}
0

评论区