思路
- 本文采用数组方式,创建长度为26的数组,用字母对应的Unicode编码做索引,先将杂志字符串每个字母存储到对应位置,再遍历赎金信字符串,减去数组中对应字母的计数,如果出现计数不够减的情况,返回false。
- 也可以通过Map对象解决,思路可参照以下笔记:
判断有效的字母异位词
https://blog.csdn.net/m0_74662483/article/details/142687420?spm=1001.2014.3001.5501
题目
示例代码
var canConstruct = function (ransomNote, magazine) {// 创建一个长度为 26 的整数数组 strArr,并初始化为 0// 用于统计杂志字符串中每个字母出现的次数const strArr = new Array(26).fill(0);// 获取字符 'a' 的 Unicode 编码值,作为后续计算的基准const base = 'a'.charCodeAt();// 遍历杂志字符串中的每个字符for (const s of magazine) {// 计算当前字符与基准字符 'a' 的编码差值,作为数组的索引// 并将对应位置的计数加 1strArr[s.charCodeAt() - base]++;}// 遍历赎金信字符串中的每个字符for (const s of ransomNote) {// 计算当前字符与基准字符 'a' 的编码差值,作为数组的索引const index = s.charCodeAt() - base;// 如果对应位置的计数为 0,说明该字母在杂志中不够用,无法拼出赎金信,返回 falseif (!strArr[index]) return false;// 将对应位置的计数减 1strArr[index]--;}// 如果遍历完赎金信字符串都没有出现不够用的情况,返回 truereturn true;
};
欢迎指正!