LeetCode(python)——49.字母异位词分组

题目

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

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

输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
输出:[["bat"],["net","then"],["and","EAT","tia"]]

解释:

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

示例 2:
输入: strs = [""]

输出:[[""]]

示例 3:
输入: strs = ["a"]

输出:[["a"]]

提示:

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

思路

解法一:

对字符串数组中的每个字符串排序,以这个排序作为Key值,当两个字符串的排序相同时,存进同一个列表

解法二:

计数,互为字母异位词的两个字符串包含的字母相同,故可以将每个字符串中出现的字母次数以字符串的形式表示,作为哈希表的Key值。由于只包含小写字母,故用大小为26的数组即可

代码

解法一

python 复制代码
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        mp = collections.defaultdict(list)

        for st in strs:
            key = "".join(sorted(st))
            mp[key].append(st)
        return list(mp.values())

解法二:

python 复制代码
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        mp = collections.defaultdict(list)

        for st in strs:
            count = [0] * 26
            for ch in st:
                count[ord(ch) - ord("a")] += 1   # ord()可以计算字母的ASIIC码值
            mp[tuple(count)].append(st)   #数组是可变的,只有将数组变为tuple才能作为哈希的key
        return list(mp.values())
相关推荐
CodeToGym3 小时前
【Java 办公自动化】Apache POI 入门:手把手教你实现 Excel 导入与导出
java·apache·excel
凡人叶枫3 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
JMchen1234 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
阔皮大师4 小时前
INote轻量文本编辑器
java·javascript·python·c#
小法师爱分享4 小时前
StickyNotes,简单便签超实用
java·python
深蓝电商API4 小时前
处理字体反爬:woff字体文件解析实战
爬虫·python
qq_297574674 小时前
Linux 服务器 Java 开发环境搭建保姆级教程
java·linux·服务器
开源技术4 小时前
Claude Opus 4.6 发布,100万上下文窗口,越贵越好用
人工智能·python
We་ct4 小时前
LeetCode 56. 合并区间:区间重叠问题的核心解法与代码解析
前端·算法·leetcode·typescript
金牌归来发现妻女流落街头4 小时前
【从SpringBoot到SpringCloud】
java·spring boot·spring cloud