Leetcode-242 有效的字母异位词

给定两个字符串 st ,编写一个函数来判断 t 是不是 s 的字母异位词。javascript

demo01

输入: s = "anagram", t = "nagaram"
输出: true

demo02

输入: s = "rat", t = "car"
输出: false

说明:
你能够假设字符串只包含小写字母。java

题解

关键词:map算法

  1. 首先判断两个字符串长度是否相等,不相等则直接返回 false
  2. 遍历串s为map赋值,组成字母为key,字母出现次数为value
  3. 遍历串t,判断字母是否在map中,若在,map值减1,若不在,返回false
  4. 算法完成,返回true
var isAnagram = function(s, t) {
    if (s.length !== t.length) {
        return false;
    }

    let obj = {};
    for (let i = 0; i < s.length; i ++) {
        let char = s.charAt(i);
        obj[char] = obj[char] ? obj[char] + 1 : 1
    }
    for (let i = 0; i < t.length; i++) {
        let char = t.charAt(i);
        if (!obj[char]) {
            return false;
        }
        if (obj[char] > 0 ) {
            obj[char] --;
        }
    }

    return true;
};

leetcode优秀题解

guanpengchn 画解算法
关键词:哈希映射函数

  1. 首先判断两个字符串长度是否相等,不相等则直接返回 false
  2. 若相等,则初始化 26 个字母哈希表,遍历字符串 s 和 t, s 负责在对应位置增长,t 负责在对应位置减小
  3. 若是哈希表的值都为 0,则两者是字母异位词
var isAnagram = function(s, t) {
    if (s.length !== t.length) {
        return false;
    }
    let alpha = new Array(26).fill(0);
    let acharCode = 'a'.charCodeAt(0);
    
    for(let i = 0; i < s.length; i++) {
        alpha[s.charCodeAt(i) - acharCode] ++;
        alpha[t.charCodeAt(i) - acharCode] --;
    }
    console.log(alpha);
    for(let i = 0; i < 26; i++) {
        if(alpha[i] != 0) {
            return false;
        }
    }

    return true;
};

conclusion

仍是大佬写的好。spa

javascript的字符串相减结果非数值,如'a' - 'a' = NAN,所以程序需获取字符串的charCode。code

软实力提高

心理契约: 任什么时候刻都存在于个体与组织之间的一系列没有明文规定的指望。(履行->违背->打破)

qrcode_for_gh_3e207eccee76_258 (3).jpg

相关文章
相关标签/搜索