题目要求:
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ransom-note
没看解析的时候写的这种解法:
javascript解答一:
var conConstruct = function(ransomNote, magazine) {
if(ransomNote.length > magazine.length) {
return false;
}
var arrRan = ransomNote.split('');
var arrMag = magazine.split('');
for(var i=0; i < arrRan.length; i++) {
var index = arrMag.indexOf(arrRan[i]);
if(index === -1) {
return false;
} else {
arrMag.splice(index, 1);
}
}
return true;
}
console.log(conConstruct('a', 'a'));
console.log(conConstruct('aa', 'a'));
console.log(conConstruct('ab', 'aab'));
看了解析后写法:
javascript解答二(执行用时更快,消耗内存更小):
/**
* @param {string} ransomNote
* @param {string} magazine
* @return {boolean}
*/
var canConstruct = function(ransomNote, magazine) {
if(ransomNote.length > magazine.length) {
return false;
}
var ranObj = {};
var magObj = {};
for (var i = 0; i < ransomNote.length; i++) {
if(!(ransomNote[i] in ranObj)) {
ranObj[ransomNote[i]] = 1;
} else {
ranObj[ransomNote[i]]++;
}
}
for (var i = 0; i < magazine.length; i++) {
if(!(magazine[i] in magObj)) {
magObj[magazine[i]] = 1;
} else {
magObj[magazine[i]]++;
}
}
for(var key in ranObj) {
if(!(key in magObj)) {
return false;
}
if (magObj[key] < ranObj[key]) {
return false;
}
}
return true;
};