抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

一:题目描述:

给你两个字符串: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

提示:

  • 1 <= ransomNote.length, magazine.length <= 105
  • ransomNotemagazine 由小写英文字母组成

三:思路

hashmap

在ransomeNote中建立哈希map,遍历字符串,将每个字符都添加到map中,并设置初值为1,若有重复的字符,值自增,即出现几次值为几次

建立之后,遍历magazine字符串,并在map中查找对应字符,若存在,对应字符的value自减,即出现几次减几次。

最终查看map中字符的value值是否为0,若都为0,则magazine中的字符可以组成ransomNote,若存在不为0的value值,即说明未被抵消完全,无法组成

图解

image-20230509225633105

四:代码

哈希表

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
28
29
30
31
32
/**
* @param {string} ransomNote
* @param {string} magazine
* @return {boolean}
*/
var canConstruct = function(ransomNote, magazine) {
//hashmap

const map = new Map()

for(let n of ransomNote){
if(map.has(n)){
map.set(n, map.get(n) + 1)
}else{
map.set(n, 1)
}
}

for(let n of magazine){
if(map.has(n) && map.get(n) > 0){
map.set(n, map.get(n) - 1)
}
}

for(let n of map){
if(n[1] != 0){
return false
}
}
// console.log(map)
return true
};

评论