0%

有效的字母异位词

有效的字母异位词

题目

给定两个字符串 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
    20
    function 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
    22
    function 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
    13
    function 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
    10
    function 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)

  • 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。