# 241.有效的字母异位词
# 思路
暴力求解
- 排序之后对比两个字符串
- 时间复杂度
O(nlogn)
空间复杂度为O(1)
哈希表
- 两个计数器进行比较,
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
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
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即可。