刷刷刷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; } }
重难点
附:学习资料链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了