LeetCode题解:1160. 拼写单词,哈希表,JavaScript,详细注释

原题链接

1160. 拼写单词

解题思路

  1. 用Map缓存chars中所有字母的数量
  2. 遍历单词的所有字母
    • 如果Map中存在当前字母,就将Map缓存的字母数量减一
    • 如果Map中不存在当前字母,或者字母数量为0,表示chars中的字母无法拼写单词,退出循环
    • 如果能完成该单词所有字母的遍历,表示chars中的字母可以拼写单词,可以统计该单词的长度
/**
 * @param {string[]} words
 * @param {string} chars
 * @return {number}
 */
var countCharacters = function(words, chars) {
  // 缓存结果
  let sum = 0
  // 缓存chars中所有字母的数量
  const charMap = new Map()

  // 统计chars中所有字母的数量
  for (const char of chars) {
    charMap.set(char, (charMap.get(char) ?? 0) + 1)
  }

  // 为外部循环设置标签,便于直接退出
  outer:
  for (const word of words) {
    // 创建一个新Map,用于统计chars的字母使用情况
    const map = new Map(charMap)

    // 遍历word中的所有字母
    for (const char of word) {
      // 如果char在map中不存在,表示chars无法拼写该单词,退出outer循环
      if (!map.get(char)) {
        continue outer
      }

      // 当前字母被使用,数量减一
      map.set(char, map.get(char) - 1)
    }

    // 如果字母都被使用,表示chars可以拼写出单词,则将单词长度计入sum
    sum += word.length
  }

  // sum为words中所有可被chars拼写出的单词长度
  return sum
};
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值