Leetcode日记:49.错位词组队&哈希表相关操作

本文介绍了LeetCode第49题的解决方案,主要利用哈希表来解决字母异位词的组合问题。分别阐述了排序数组分类和计数分类两种方法,并详细探讨了哈希表的实现原理、常见哈希函数及应用场景。
摘要由CSDN通过智能技术生成

题目

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

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

说明:

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

问题分析

题目中可以看出,我们要找出满足某一种条件的字符串集合,这个条件是:字母全对,只是错位
针对这种情况,我们可以利用算法,先将字符串排序,再比较(排序之后的两个错位字符串会变成一样的)。
或者统计每个字符串所出现字母次数,放入哈希表进行比较。

方法一:排序数组分类

  1. 思路

当且仅当它们的排序字符串相等时,两个字符串是字母异位词。
2. 算法

维护一个映射 ans : {String -> List},其中每个键 K K K 是一个排序字符串,每个值是初始输入的字符串列表,排序后等于 K K K

在 Java 中,我们将键存储为字符串,例如,code。

方法二:计数分类

1.思路

当且仅当它们的字符计数(每个字符的出现次数)相同时,两个字符串是字母异位词。
2. 算法

我们可以将每个字符串 s \text{s} s 转换为字符数 count \text{count} count,由26个非负整数组成,表示 $ \text{a} , , \text{b} , , \text{c}$ 的数量等。我们使用这些计数作为哈希映射的基础。

在 Java 中,我们的字符数 count 的散列化表示将是一个用 字符分隔的字符串。 例如,abbccc 将表示为 #1#2#3#0#0#0 …#0(表示 a 出现了1次, b 出现了2次),其中总共有26个条目。。

代码-排序

class Solution {
   
    public List<List<String>> groupAnagrams(String[] strs) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值