字母异位词

101 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目描述

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。(出自力扣)

  • 示例1
输入: s = "anagram", t = "nagaram"
输出: true
  • 示例2
输入: s = "rat", t = "car"
输出: false

思路分析

  • 给出两个字符串str1和str2,两个字符串进行对比,无论两个字符串里面的每次字符出现的位置是不是一样,只要出现的次数相同,两个字符串就是属于字母异位词。
  • 若是两个字符串的长度不一致,那么肯定不是字母异位词
  • 可以给第一个字符串做一次循环,以字母作为对象的键,字母出现的次数作为值,组成一个新的对象;
  • 给第二个字符串做一次循环,判断每次循环中的字母是不是在新的对象中,若是有一个字母不在对象里面,则可以直接 return false 出去;若是该字母有在对象里面,那么字母相对应对象里面的值就要减一,直至到循环结束,对象里面所有的值都是0,那么,这两个字符串就是字母异位词。

AC代码

let str1 = "anagram"
let str2 = "nagaram"
function isAnagram(str, str2) {
    if (str.length !== str2.length) {
        return false;
    }
    const obj = {};
    for (let i = 0; i < str.length; i++) {
        obj[str[i]] ? (obj[str[i]]++) : (obj[str[i]] = 1);
    }
    for (let i = 0; i < str2.length; i++) {
        if (obj[str2[i]] && obj[str2[i]] > 0) {
            obj[str2[i]]--;
        } else {
            return false;
        }
    }
    return true;
};
console.log(isAnagram(str1, str2))

总结

这是一个简单的计算字母出现次数算法,主要考察数组和对象,复杂类型属于简单的;这道算法题还有很多种解法,这里只是给出了一个简单的解决方法(出自力扣)。