[路飞]_1189. “气球” 的最大数量

1,206 阅读2分钟

「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战

1189. “气球” 的最大数量

题目

给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 "balloon"(气球)。

字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "balloon"。

示例1

image.png

输入: text = "nlaebolko"
输出: 1

示例2

image.png

输入: text = "loonbalxballpoon"
输出: 2

示例3

输入: text = "leetcode"
输出: 0

题解

统计模拟

简单类型的题目,直接根据题目描述模拟即可。

  • 第一步:枚举字符串texttext,统计 texttext 中单词字符串数量,并将使用的字符串的数量存放在变量 mapmap
  • 枚举字符串 balloonballoon ,将单词 balloonballoon中使用的字符串逐一在 mapmap中查找
  • 有因为组成一个balloonballoon 单词需要2lo2个l、o,所以在遇到lol、o的时候需要将字符串texttext存在的lol、o数量减半,并且向下去整
  • 所以在字符串texttext最少数量的abnloa、b、n、l、o就是最多能组成目标单词 balloonballoon 的数量
  • 返回结果

注意:

  • 组成的单词数量是整数,所以在遇到lol、o数量减半,要向下去整
  • 单词 balloonballoon使用的字符可能在texttext不存在,所以balloonballoon字符串在 mapmap中查找的时候,需要将 undefined 转为0

根据上述思路编辑代码如下:

完整代码

var maxNumberOfBalloons = function(text) {
    const map  = {};
    for(let i = 0 ; i < text.length ; i++){
        map[text[i]] = (map[text[i]] || 0 )+ 1
    }
    const s = 'balloon';
    let result  = Infinity
    for(let i = 0 ; i < s.length ; i++){
        if(s[i] === 'l' || s[i] === 'o'){
            result = Math.min(result, Math.floor((map[s[i]] || 0)/2) )
        }else{
            result = Math.min(result, map[s[i]] || 0 )

        }
    }
    return result 
};

结语

或许本题过于简单,许多人可以一眼看到答案。但我想,既然这题存在,就值得记录。如有疑问可以评论区讨论。