当前位置: 首页 > news >正文

算法题-02

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

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

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

解释:

    在 strs 中没有字符串可以通过重新排列来形成 "bat"。
字符串 "nat" 和 "tan" 是字母异位词,因为它们可以重新排列以形成彼此。
字符串 "ate" ,"eat" 和 "tea" 是字母异位词,因为它们可以重新排列以形成彼此。

示例 2:

输入: strs = [""]

输出: [[""]]

示例 3:

输入: strs = ["a"]

输出: [["a"]]
提示:

    1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母

整体思路:

由于解释我们可以知道,所谓的将字母异位词组合在一起,其实上就是把相同字母包括个数一样的单词放到同一个list数组中去。

我们可以创建一个哈希表map,将key里面写入经过排序后的字符串(因为这些字母异位词中的字母排序过后的顺序都是一样的),value中存储的是对应的原始字符串列表。最后返回所有的value

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>> map = new HashMap<>();for(String str : strs){char[] s = str.toCharArray();Arrays.sort(s);if(map.containsKey(new String(s))){map.get(new String(s)).add(str);}else{List<String> temp = new ArrayList<>();temp.add(str);map.put(new String(s),temp);}}return new ArrayList<>(map.values());}
}

              将字符串转换成字符数组,对字符数组排序,排序后:"eat" → ['a','e','t'] → "aet","tea" → ['a','e','t'] → "aet",排序的作用:字母异位词排序后都是相同的字符串,便于用作 key

      map.containsKey(new String(s)),检查排序后的字符串是否已经存在 key
      map.get(new String(s)).add(str),已存在,则把原始字符串加入已有列表
      如果 key 不存在:创建新列表 temp,把原始字符串加入列表,放入 map

      put 和 get 的区别
      put(key, value):用于 插入或覆盖 key 对应的 value
      例子:
      map.put("aet", new ArrayList<>(Arrays.asList("eat"))); // 创建新列表
      map.put("aet", new ArrayList<>(Arrays.asList("tea"))); // 覆盖原列表,变成 ["tea"]


      get(key):用于 获取 key 对应的 value
      例子:
      List<String> list = map.get("aet"); // list = ["eat"]
      list.add("tea");                     // list = ["eat","tea"]
      注意:get(key) 拿到的是 value 的引用,修改引用内部内容不会改变 map 的 key 对应引用本身。
      为什么这里用 get 而不是 put
      目标:把当前字符串加入已存在的异位词组,而不是创建新的列表或覆盖原有列表。
      if(map.containsKey(new String(s))){
      map.get(new String(s)).add(str);  // 在已有列表里添加元素
      } else {
      List<String> temp = new ArrayList<>();
      temp.add(str);
      map.put(new String(s), temp);     // key 不存在,创建新列表
      }
      如果用 put:
      map.put(new String(s), new ArrayList<>(Arrays.asList(str)));
      每次 put 都会创建一个新的列表,原来的列表被覆盖 → 已有的字母异位词丢失,这就不是我们想要的逻辑了

      http://www.dtcms.com/a/361779.html

      相关文章:

    • 大型语言模型监督微调(SFT)
    • GitLab 18.3 正式发布,更新多项 DevOps、CI/CD 功能【二】
    • MiniCPM-V-4.5:重新定义边缘设备多模态AI的下一代视觉语言模型
    • 前端测试深度实践:从单元测试到E2E测试的完整测试解决方案
    • Axios与Ajax:现代Web请求大比拼
    • 新手向:前端开发中的常见问题
    • Laser Lorentzian Lineshape
    • 进程控制之进程创建与终止
    • Vue3+TS 流星夜景
    • TensorFlow 2.10 是最后一个支持在原生Windows上使用GPU的TensorFlow版本
    • Redisson和Redis实现分布式锁的对比
    • 【免费数据】2019年我国36个主要城市的高分辨率城市空地分布矢量数据
    • 【2025ICCV】
    • FOUPK3云服务平台旗下产品
    • Python 实战:内网渗透中的信息收集自动化脚本(7)
    • GD32入门到实战24--RTC实时时钟
    • 恶意软件概念学习
    • 【游戏开发】Houdini相较于Blender在游戏开发上有什么优劣势?我该怎么选择开发工具?
    • 【Java】Redis(中间件)
    • 订单后台管理系统-day07菜品模块
    • 域名备案后不解析可以吗
    • 五、导入现有模型
    • Docker基本介绍
    • 面试记录8 Linux/c++中级开发工程师(智能座舱)
    • 六大关键步骤:用MES系统重构生产计划管理闭环
    • Linux开发必备:yum/vim/gcc/make全攻略
    • 如何使用 JMeter 进行接口测试。
    • Java 常见异常系列:NumberFormatException 数字格式异常
    • ROS1系列学习笔记之ROS的调用,示例为激光雷达N10P的运行(含常见问题与踩坑解答)
    • 数据结构:计数排序 (Counting Sort)