242. 有效的字母异位词:给定两个字符串?s
?和?t
?,编写一个函数来判断?t
?是否是?s
?的字母异位词。
思路:首先排除两个字符串长度不相等(不是异位词)情况;使用Map去记录第一个字符串中每个字符的个数,遍历第二个字符串中每个字母是否在map中,如果在就减去相应的个数,同时判断是否存在个数小于零的情况(不是异位词);如果不在map中,直接判定不是异位词;具体代码如下:
var isAnagram = function(s, t) {
if(s.length !== t.length) return false; // 优先通过长度不相等确定不是异位词
let map = new Map(); // 存储第一个词每个字母的个数
for(let i = 0; i <s.length;i++){
if(map.has(s[i])){ // 如果没有就默认值为1,有就进行+1;
map.set(s[i],map.get(s[i])+1)
} else {
map.set(s[i],1)
}
}
for(let j = 0; j <t.length; j++){
if(map.has(t[j])){ // 如果字母在map中
const res = map.get(t[j]) -1
if(res<0){ // 如果出现小于0的就认为不是异位词;
return false;
}
map.set(t[j],res)
} else { // 如果字母没有在map中就直接判定不是异位词
return false;
}
}
// 所有字母都匹配完成,确定是异位词
return true;
};
总结:该题关键是使用了map字典存储O(n),否则用暴力就需要双重循环O(n^2),典型的空间换时间的思路;