题目

点击前往

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

示例 1:

1
2
输入:ransomNote = "a", magazine = "b"
输出:false

示例 2:

1
2
输入:ransomNote = "aa", magazine = "ab"
输出:false

示例 3:

1
2
输入:ransomNote = "aa", magazine = "aab"
输出:true

解题思路

  • 利用哈希表。
  • 首先遍历magazine,将组成magazine的字符以及其出现的次数用哈希表表示。
  • 然后遍历ransomNote,将哈希表中存在的值进行减操作。
  • 如果哈希表中所有value均大于等于0,那么就符合题目条件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* @param {string} ransomNote
* @param {string} magazine
* @return {boolean}
*/
var canConstruct = function(ransomNote, magazine) {
if(ransomNote.length > magazine.length) return false;
let hashmap = new Map();
for(let i of magazine){
if(!hashmap.has(i)){
hashmap.set(i,1);
}else{
let val = hashmap.get(i)+1;
hashmap.set(i,val);
}
}
for(let i of ransomNote){
if(hashmap.has(i)){
let val = hashmap.get(i)-1;
if(val < 0) return false;
else hashmap.set(i,val);
}else{
return false
}
}
return true;
};