有效的字母异位词
题目
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
提示:
1 <= s.length, t.length <= 5 * 104
s 和 t 仅包含小写字母
题解
两个map比较字母数是否相同
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20function isAnagram(s: string, t: string): boolean {
const strToMap = (s: string) => {
const strMap = new Map<string, number>();
for (let i = 0; i < s.length; i++) {
strMap.set(s[i], (strMap.get(s[i]) || 0) + 1);
}
return strMap;
};
const sMap = strToMap(s);
const tMap = strToMap(t);
if (sMap.size !== tMap.size) {
return false;
}
for (let i of sMap.keys()) {
if (sMap.get(i) !== tMap.get(i)) {
return false;
}
}
return true;
}便利第一个字符串为map,便利第二个字符串,如果第一个map有,就减去1,最后看smap的数字是否都是0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22function isAnagram(s: string, t: string): boolean {
const strToMap = (s: string) => {
const strMap = new Map<string, number>();
for (let i = 0; i < s.length; i++) {
strMap.set(s[i], (strMap.get(s[i]) || 0) + 1);
}
return strMap;
};
const sMap = strToMap(s);
for (let i = 0; i < t.length; i++) {
if (!sMap.get(t[i])) {
return false;
}
sMap.set(t[i], sMap.get(t[i])! - 1);
}
for (let [, v] of sMap) {
if (v !== 0) {
return false;
}
}
return true;
}排序后遍历
1
2
3
4
5
6
7
8
9
10
11
12
13function isAnagram(s: string, t: string): boolean {
if (s.length !== t.length) {
return false;
}
const sArr = s.split("").sort();
const tArr = t.split("").sort();
for (let i = 0; i < sArr.length; i++) {
if (sArr[i] !== tArr[i]) {
return false;
}
}
return true;
}字符替换法,耗时比较长
1
2
3
4
5
6
7
8
9
10function isAnagram(s: string, t: string): boolean {
if (s.length !== t.length) {
return false;
}
for (let i = 0; i < s.length; i++) {
t = t.replace(s[i], "");
console.log(t);
}
return !t.length;
}来源
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn96us/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。