题目描述:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
解析:
1.如果两个数组长度不一致,则返回false
2.创建一个map,用来存储每个字符出现的次数
3.对于第一个单词的每个字母,也就是s[i],在map里将出现次数+1,对于第二个单词的每个字母,也就是t[i],在map里将出现次数-1
4.遍历完成后,检查map里的每一个字母的出现次数是不是0,如果有一个非0的字母,则返回false,否则返回true
Java:
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()) {
return false;
}
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for(int i = 0; i < s.length(); i++) {
char sChar = s.charAt(i);
if(map.containsKey(sChar)) {
map.put(sChar, map.get(sChar) + 1);
} else {
map.put(sChar, 1);
}
char tChar = t.charAt(i);
if(map.containsKey(tChar)) {
map.put(tChar, map.get(tChar) - 1);
} else {
map.put(tChar, -1);
}
}
for(int count : map.values()) {
if(count != 0) {
return false;
}
}
return true;
}
JavaScript:
var isAnagram = function(s, t) {
if(s.length != t.length) {
return false;
}
const map = new Map();
for(let i = 0; i < s.length; i++) {
if(map.has(s[i])) {
map.set(s[i], map.get(s[i]) + 1);
} else {
map.set(s[i], 1);
}
if(map.has(t[i])) {
map.set(t[i], map.get(t[i]) - 1);
} else {
map.set(t[i], -1);
}
}
for(const letter of map) {
if(letter[1] !== 0) {
return false;
}
}
return true;
};