- 赎金信
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1:
输入:ransomNote = “a”, magazine = “b”
输出:false
示例 2:
输入:ransomNote = “aa”, magazine = “ab”
输出:false
示例 3:
输入:ransomNote = “aa”, magazine = “aab”
输出:true
提示:
1 <= ransomNote.length, magazine.length <= 105
ransomNote 和 magazine 由小写英文字母组成
解法一
/**
使用数组统计magazine中字符的个数,声明一个长度为26的数组,初始化数组中的数据为0,将当前字符的字符码减去字符a的字符码,就可以将a-z字符放置在长度为26的数组中,然后使用for循环遍历ransomNote字符串,如果对应的位置为0,那说明在magazine中没有对应的字符了,直接返回false,否则将当前位置字符个数减一,最后遍历完成可以说明ransomNote中有的字符,在magazine中均存在,返回true即可
* @param {string} ransomNote
* @param {string} magazine
* @return {boolean}
*/
var canConstruct = function(ransomNote, magazine) {
let arr = new Array(26).fill(0);
let aCode = 'a'.charCodeAt();
for(let i of magazine){
let index = i.charCodeAt()-aCode;
arr[index]++;
}
for(let j of ransomNote){
let index = j.charCodeAt()-aCode;
if(arr[index]==0) return false;
arr[index]--;
}
return true;
};
版权声明:本文为cjhxydream原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。