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

相關文章
相關標籤/搜索