刷刷刷Day6|242.有效的字母异位词

242.有效的字母异位词

LeetCode题目要求

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true

解题思路
  • HashMap 记录字符出现次数解法,首先通过 HashMap 记录字符串 s 各个字符出现的次数,再遍历字符串 t 字符时,出现一个字符,就从 HashMap 减去一次,如果减去后的次数小于 0 或字符直接不存在,那么就说明不是异位词

上代码,HashMap 解法

class Solution {
public boolean isAnagram(String s, String t) {
// 若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词
// 根据题目要求,可以通过对 s 中的字符计数,并与 t 的字符计数对比数量,如果各个字符数完全相等,
// 那么认为是异位词
if (s.length() != t.length()) {
return false;
}
Map<Character, Integer> countMap = new HashMap<>();
char[] ss = s.toCharArray();
for (char c : ss) {
if (countMap.containsKey(c)) {
countMap.put(c, countMap.get(c) + 1);
} else {
countMap.put(c, 1);
}
}
char[] ts = t.toCharArray();
for (char c : ts) {
if (countMap.containsKey(c)) {
int count = countMap.get(c);
if (count - 1 < 0) {
return false;
} else {
countMap.put(c, count - 1);
}
} else {
return false;
}
}
return true;
}
}
  • 数组解法,定义 26 长度的 int 数组,数组中首先记录的是从索引 0~26 的每个字符出现的次数,然后根据另一个字符串将出现的次数减去。如果最终数组元素值都等于 0 ,说明是异位词。相比使用 HashMap 来说节省了空间及操作时间

上代码

class Solution {
public boolean isAnagram(String s, String t) {
int[] counter = new int[26];
// 遍历字符串 s, 记录字符出现的次数
for (int i = 0; i < s.length(); i++) {
counter[s.charAt(i) - 'a']++;
}
// 遍历字符串 t
for (int i = 0; i < t.length(); i++) {
counter[t.charAt(i) - 'a']--;
}
for (int i = 0; i < counter.length; i++) {
if (counter[i] != 0) {
return false;
}
}
return true;
}
}
重难点

附:学习资料链接

posted @   blacksonny  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示