共计 1258 个字符,预计需要花费 4 分钟才能阅读完成。
赎金信
-
哈希映射
建设一个哈希表
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; };
小结
- 呈现次数之类的题能够用哈希表来搞定
- 字符串和数组之间的关系非常严密, 在须要时能够互相转化.
正文完