思路:首先定义一个长度为26的数组hash[26],并且初始化为0,一开始没有初始化,所以定义的数组给的值都是随机的值。该数组用于存储字符串 s 字符出现的次数,这样的话对字符串 t 同样遍历一遍对出现的字符对应下标的值进行减减,最后再对该数组遍历一次判断是否都为0。
C++代码:
// C++代码是学习别人的,一开始自己没有想到竟然可以使用数组来实现哈希,所以就标记一下,这样以后查看的时候还能提醒一下自己,通过数组来实现hash主要是适用那些长度能够确定的以及简短的。
class Solution {
public:
bool isAnagram(string s, string t) {
int hash[26] = {0};
for(int i = 0; i < s.size(); i++){
hash[s[i] - 'a']++;
}
for(int i = 0; i < t.size(); i++){
hash[t[i] - 'a']--;
}
for(int i = 0; i < 26; i++){
if(hash[i] != 0) return false;
}
return true;
}
};
JavaScript代码:
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
let map = new Map();
let cnt = 0;
if(s.length != t.length) return false;
for(let i = 0; i < s.length; i++){
cnt = 0;
if(map.get(s[i])){
cnt = map.get(s[i]);
}
map.set(s[i],cnt + 1);
}
for(let i = 0; i < t.length; i++){
cnt = map.get(t[i]);
if(cnt){
map.set(t[i],cnt - 1);
}else{
return false;
}
}
return true;
};