算法升级之路(三)

字母异位词分组

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

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

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

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

解题思路

最容易想到的是:从第一个字符串开始,把字符串中的字符放入map中,然后循环比较每一个字符串的字符是不是在map中存在,

但是有几个问题难以解决

  1. 查找出来的属于字母异位词的,没有办法去除,因为数组去除元素比较复杂
  2. 占空间大,每一个字符串都要声明一个map来存

排序法:

字母异位词 他们包含的字符都是相等的,那经过排序之后的字符串也肯定相等,然后将他们放到map<String,List>,最后将map中所有的value取到即可。

java 复制代码
 public List<List<String>> groupAnagrams(String[] strs) {
        Map <String,List<String>> map = new HashMap <String,List<String>> ();
        if(strs.length==0){
            return new ArrayList<List<String>>();
        }
        List<List<String>> resList = new ArrayList();
        for(int i=0;i<strs.length;i++){
            char []array = strs[i].toCharArray();
            Arrays.sort(array);
            String key = new String (array);
            List<String> list=map.getOrDefault(key,new ArrayList<String>());
            list.add(strs[i]);
            map.put(key,list);     
            
        }
        return new ArrayList<List<String>>(map.values());

    }

在此种解法中学到的,
字符串转字符数组:char [] chars = str.toCharArray();
还有这个方法
map.getOrDefault(key,value);
如果key在map中不存在就,将value获取到
否则就获取map中key对应的值。
相关推荐
Cerman7 小时前
QEMU启动OVMF shell超时分析
c语言·windows·经验分享
世人万千丶7 小时前
鸿蒙项目实战 - 社区活动编排板:标签云布局算法与自动换行
学习·算法·华为·harmonyos·鸿蒙
zander2587 小时前
LeetCode 279. 完全平方数
算法·深度优先
典典分享指南8 小时前
VS Code Git 工作树:解锁多分支并行开发新体验
算法·决策树·逻辑回归·启发式算法
_Narcissus_8 小时前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举
天疆说8 小时前
策略的进化:从随心所欲到稳健前行
算法
冻柠檬飞冰走茶8 小时前
《数据结构实验指导-C++语言版》 在顺序表 list 中查找元素 x
开发语言·数据结构·c++·算法·list
冻柠檬飞冰走茶9 小时前
《数据结构实验指导-C++语言版》 返回单链表 list 中第 i 个元素值
开发语言·数据结构·c++·算法·list
happyprince10 小时前
03-深刻观-CodeX哲学与升华(源码)
算法·ai编程
不会打球的王子10 小时前
Day 27:迁移学习与微调 — 站在巨人的肩膀上
算法