哈希算法题目:赎金信
字数 549 2025-10-27 17:41:11
哈希算法题目:赎金信
题目描述:给定一个赎金信字符串和一个杂志字符串,判断赎金信字符串能否由杂志字符串中的字符构成。杂志字符串中的每个字符只能在赎金信中使用一次。
解题过程:
-
问题分析:需要检查赎金信的所有字符是否都出现在杂志中,且杂志中每个字符的使用次数不能超过出现次数。
-
哈希表思路:
- 用哈希表统计杂志中每个字符的出现次数
- 遍历赎金信的每个字符,在哈希表中对应计数减1
- 如果某个字符的计数不足,则返回false
-
具体步骤:
a. 创建字符到计数的哈希映射
b. 遍历杂志字符串,统计每个字符出现次数
c. 遍历赎金信字符串:- 检查当前字符是否在哈希表中且计数>0
- 如果否,返回false
- 如果是,将对应计数减1
d. 成功遍历完赎金信则返回true
-
优化方案:由于字符范围有限(小写字母),可用长度26的数组代替哈希表:
- 创建长度为26的整数数组
- 杂志字符对应位置加1,赎金信字符对应位置减1
- 检查过程中若出现负数立即返回false
-
边界情况处理:
- 赎金信为空字符串时直接返回true
- 杂志字符数少于赎金信时直接返回false
- 考虑大小写敏感性(通常本题视为只包含小写字母)
-
复杂度分析:
- 时间复杂度:O(m+n),其中m和n分别为杂志和赎金信长度
- 空间复杂度:O(1),因使用固定大小的数组