赎金信

  • 哈希映射

    建设一个哈希表 lettersPool, 用于寄存 magazine 中呈现的 字母 以及 对应数量

    /** * @param {string} ransomNote * @param {string} magazine * @return {boolean} */var canConstruct = function(ransomNote, magazine) {    const lettersPool = new Map();        for(let letter of magazine) {        if(lettersPool.has(letter)) {            lettersPool.set(letter, lettersPool.get(letter) + 1);        } else {            lettersPool.set(letter, 1);        }    }    for(let letter of ransomNote) {        if(lettersPool.has(letter)) {            const rest = lettersPool.get(letter);            if(rest === 0) return false;            lettersPool.set(letter, lettersPool.get(letter) - 1);        } else {            return false;        }    }        return true;};

无效的字母异位词

  • 排序比拟

    /** * @param {string} s * @param {string} t * @return {boolean} */var isAnagram = function(s, t) {          if(s.length !== t.length) return false;          const lettersOfS = s.split('').sort();          const lettersOfT = t.split('').sort();          for(let i = 0; i < lettersOfS.length; i++) {            if(lettersOfS[i] !== lettersOfT[i]) return false;          }          return true;        };
  • 哈希映射

    这种办法我的以往题解写的比拟多, 这里就不再写了.

将字符串拆分为若干长度为 k 的组

  • 模仿

    简略模仿操作

    /** * @param {string} s * @param {number} k * @param {character} fill * @return {string[]} */var divideString = function(s, k, fill) {          const result = [];          const fillNumber = k - s.length % k;          for(let i = k; i <= s.length; i += k) {            result.push(s.slice(i - k, i));          }          if(fillNumber !== 0 && fillNumber !== k) result.push(s.slice(s.length - s.length % k) + Array(fillNumber).fill(fill).join(''));          return result;        };

小结

  • 呈现次数之类的题能够用哈希表来搞定
  • 字符串和数组之间的关系非常严密, 在须要时能够互相转化.