42.有效的字母异位词
题目
要求
给定两个字符串 s
和 t
,编写一个函数来判断 t
是否是 s
的字母异位词。
注意:若 s
和 t
中每个字符出现的次数都相同,则称 s
和 t
互为字母异位词。
提示:
1 <= s.length, t.length <= 5 * 104
s
和t
仅包含小写字母
思路
这道题目脑海中的第一个想法就是使用哈希来解决,key 为字符串中的每一个字母,值为字母出现的次数,遍历第一个字符串字母出现了就加一,遍历第二个字符串字母就减一,代码如下:
public boolean isAnagram(String s, String t) {
Map<Character, Integer> map = new HashMap<>();
if (s.length() != t.length()) {
return false;
}
char[] sCharArray = s.toCharArray();
for (char c : sCharArray) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
char[] tCharArray = t.toCharArray();
for (char c : tCharArray) {
map.put(c, map.getOrDefault(c, 0) - 1);
}
for (Integer value : map.values()) {
if (value != 0) {
return false;
}
}
return true;
}
第二个思路不容易想到,要根据提示来,提示是只包含小写字母,那我可以直接声明一个 26 长的数组,这样相对于哈希来说,少了一个 get 操作,思路都是一样,代码如下:
public boolean isAnagram(String s, String t) {
int[] arr = new int[26];
if (s.length() != t.length()) {
return false;
}
char[] sCharArray = s.toCharArray();
for (char c : sCharArray) {
arr[c - 97] ++;
}
char[] tCharArray = t.toCharArray();
for (char c : tCharArray) {
arr[c - 97] --;
}
for (int i : arr) {
if (i != 0) {
return false;
}
}
return true;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2018-12-18 并发编程(上)