# 241.有效的字母异位词

img

# 思路

  1. 暴力求解

    • 排序之后对比两个字符串
    • 时间复杂度O(nlogn) 空间复杂度为O(1)
  2. 哈希表

    • 两个计数器进行比较, s++j--,看最后结果键值全部为0;
    • 时间复杂度:O(n) 空间复杂度:O(1)

# 别人答案

//1.
var isAnagram = function (s,t){
    if(s == t){ return true }
    return s.split('').sort().join('') == t.split('').sort().join('')
}
//2.
var isAnagram = function (s,t){
    if(s == t){ return true }
    if(s.length != t.length){ return false }
    let obj = {};
    for(let i=0;i<s.length;i++){
        if(!obj[s[i]]){
            obj[s[i]] = 0;
        }
        obj[s[i]] += 1;
        if(!obj[t[i]]){
            obj[t[i]] =0;
        }
        obj[t[i]] -= 1; 
    }
    for(let i in obj){
        if(obj[i] != 0){ return false }
    }
    return true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 本人答案

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    if(s.length !== t.length) {
        return false;
    } else if(s.length === 0 && t.length === 0) {
        return true;
    } else {
        let sMap = new Map();
        for(let i = 0;i<s.length;i++) {
            if(sMap.has(s[i])) {
                sMap.set(s[i], sMap.get(s[i]) + 1);
            } else {
                sMap.set(s[i], 1)
            }
        }
        for(let j=0;j<t.length;j++) {
            if(sMap.has(t[j])) {
                sMap.set(t[j], sMap.get(t[j]) -1)
            }
        }
        let value = [...sMap.values()]
        let result = value.filter(item => {
            return item !== 0;
        })
        if(result.length !== 0) {
            return false;
        } else {
            return true;
        }
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

最后这里判断哈希表某个key不为0需要再遍历一次,可以再遍历第二个字符串的时候把哈希表没有的key补充上,最后看看哈希表的size属性是否为0即可。