383.赎金信(javascript)383.RansomNote
原创leetcode标题来源: https://leetcode-cn.com/problems/ransom-note/
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的人物组成了。
如果可能,返回 true ; 否则返回 false 。
magazine 中的每个字符只能位于 ransomNote 使用过一次。
Given two strings ransomNote and magazine, return true if ransomNote can be constructed from magazine and false otherwise.
Each letter in magazine can only be used once in 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 由小写英文字母组成
Example 1:
Input: ransomNote = “a”, magazine = “b”
Output: false
Example 2:
Input: ransomNote = “aa”, magazine = “ab”
Output: false
Example 3:
Input: ransomNote = “aa”, magazine = “aab”
Output: true
Constraints:
1 <= ransomNote.length, magazine.length <= 105
ransomNote and magazine consist of lowercase English letters.
分析主题
1.ransomNote 和 magazine这两种类型都是字符串,都是小写字母。
2.magazine是否可以合成ransomNote ,-magazine的长度>ransomNote 的长度
3.新建一个list列表,用于存储每个字母的出现次数,按顺序排列
0 25
a z
97 122 相应的编码
var canConstruct = function (ransomNote, magazine) {
if (ransomNote.length > magazine.length) {
return false
}
let list = new Array(26).fill(0)
for (let k of magazine) {//遍历magazine 存储每个字母的出现次数
list[k.charCodeAt() - 97]++ //此处的97相当于a.charCodeAt()
}
for (let j of ransomNote) {//遍历ransomNote 减去每个字母的出现次数
list[j.charCodeAt() - 97]--
if (list[j.charCodeAt() - 97] < 0) {//当在列表中找到时0数字false
return false
}
}
//条件满足,返回true
return true
};
这里对代码进行了优化,以缩短执行时间。
var canConstruct = function (ransomNote, magazine) {
let lenR=ransomNote.length
let lenT=magazine.length
if (lenR > lenT) {
return false
}
let list = new Array(26).fill(0)
for (let k of magazine) {
list[k.charCodeAt() - 97]++
}
for (let j of ransomNote) {
list[j.charCodeAt() - 97]--
if (list[j.charCodeAt() - 97] < 0) {
return false
}
}
return true
};
知识点:
1.使用阵列
1.var arrayObj = new Array(); //创建阵列
2.var arrayObj = new Array([size]); //创建阵列并指定长度,注意不是上限,是长度
3.var arrayObj = new Array([element0[, element1[, …[, elementN]]]]); 创建阵列并赋值
需要注意的是,尽管创建数组的第二种方法指定了长度,但实际上数组在所有情况下都会变长,即即使指定了长度。5,您仍然可以存储指定长度以外的元素。注:长度将相应改变。
二、fruits.fill(“Runoob”);
用固定值填充数组:
var fruits = [“Banana”, “Orange”, “Apple”, “Mango”];
fruits.fill(“Runoob”);
Runoob,Runoob,Runoob,Runoob
填充 “Runoob” 到数组的最后两个元素:
var fruits = [“Banana”, “Orange”, “Apple”, “Mango”];
fruits.fill(“Runoob”, 2, 4);
输出结果:
Banana,Orange,Runoob,Runoobarray.fill(value, start, end)
value 必修的。填充的值。
start 可选择的开始填充位置。
end 可选择的停止填充位置 (默认为 array.length)
三、charCodeAt
97相当于a.charCodeAt()
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123



