0
点赞
收藏
分享

微信扫一扫

LeetCode 242.有效的字母异位词(简单)

LeetCode 242.有效的字母异位词(简单)_字符串

题目描述

LeetCode 242.有效的字母异位词(简单)_字符统计_02


给定两个字符串 ​​s​​​ 和 ​​t​​​ ,编写一个函数来判断 ​​t​​​ 是否是 ​​s​​ 的字母异位词。

注意:若 ​​s​​​ 和 ​​t​​​ 中每个字符出现的次数都相同,则称 ​​s​​​ 和 ​​t​​ 互为字母异位词。

LeetCode 242.有效的字母异位词(简单)_字符串

示例 1

LeetCode 242.有效的字母异位词(简单)_字符统计_02


输入: s = "anagram", t = "nagaram"
输出: true

LeetCode 242.有效的字母异位词(简单)_字符串

示例 2

LeetCode 242.有效的字母异位词(简单)_字符统计_02


输入: s = "rat", t = "car"
输出: false

LeetCode 242.有效的字母异位词(简单)_字符串

提示

LeetCode 242.有效的字母异位词(简单)_字符统计_02


  • 1 <= s.length, t.length <= 5 *
  • ​s​​​ 和 ​​t​​ 仅包含小写字母

LeetCode 242.有效的字母异位词(简单)_字符串

进阶

LeetCode 242.有效的字母异位词(简单)_字符统计_02


如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

LeetCode 242.有效的字母异位词(简单)_字符串

题目分析

LeetCode 242.有效的字母异位词(简单)_字符统计_02


这道题是一道字符串相关的题目,可以创建一个数组,遍历字符串统计并保存各个字符出现的次数,但这一次我们还是使用哈希表的方法来解决这道题。首先考虑特殊情况,就是字符串长度不相等的情况,直接返回 ​​false​​​ 即可。我们创建一个哈希表,首先遍历字符串 ​​s​​​ ,获取每一个字符并将其作为 ​​key​​​ 存入哈希表, ​​value​​​ 是对应 ​​key​​​ 出现的次数。然后我们再遍历字符串 ​​t​​​ ,获取每一个字符并将其作为 ​​key​​​ ,在哈希表中更新其对应的 ​​value​​​ 值,将其 ​​value​​​ 值减一,判断更新后的 ​​value​​​ 值是否已经为负数,如果为负数则证明当前 ​​key​​​ 在 ​​t​​​ 中出现的次数比在 ​​s​​​ 中出现的次数多了,直接返回 ​​false​​​ 即可。如果遍历完 ​​t​​​ 哈希表中的值都为零,就证明各个字符在 ​​s​​​ 和 ​​t​​​ 中出现的次数一样多,返回 ​​true​​ 。

LeetCode 242.有效的字母异位词(简单)_字符串

题解

LeetCode 242.有效的字母异位词(简单)_字符统计_02


执行用时: 15 ms

内存消耗: 41.9 MB

class Solution {
public boolean isAnagram(String s, String t) {
// 字符串长度不同 直接返回 false
if (s.length() != t.length()) {
return false;
}
// 创建一个哈希表
HashMap<Character, Integer> map = new HashMap<>();
// 遍历字符串 s
for (int i = 0; i < s.length(); ++i) {
// 取出当前字符
char c = s.charAt(i);
// 放入哈希表 value 是出现的次数
map.put(c, map.getOrDefault(c, 0) + 1);
}
// 遍历字符串 t
for (int i = 0; i < t.length(); ++i) {
// 取出当前字符
char c = t.charAt(i);
// 更新哈希表 将出现的字符统计次数减去一
map.put(c, map.getOrDefault(c, 0) - 1);
// 如果当前字符出现次数为负数
// 证明当前字符在 t 中已经比在 s 中多了
if (map.get(c) < 0) {
// 返回 false
return false;
}
}
// 次数一致返回 true
return true;
}
}

题目来源:力扣(LeetCode)




举报

相关推荐

0 条评论