原題鏈接
1160. 拼寫單詞
解題思路
- 用Map緩存chars中所有字母的數(shù)量
- 遍歷單詞的所有字母
- 如果Map中存在當(dāng)前字母坟比,就將Map緩存的字母數(shù)量減一
- 如果Map中不存在當(dāng)前字母芦鳍,或者字母數(shù)量為0,表示chars中的字母無法拼寫單詞葛账,退出循環(huán)
- 如果能完成該單詞所有字母的遍歷,表示chars中的字母可以拼寫單詞籍琳,可以統(tǒng)計(jì)該單詞的長(zhǎng)度
/**
* @param {string[]} words
* @param {string} chars
* @return {number}
*/
var countCharacters = function(words, chars) {
// 緩存結(jié)果
let sum = 0
// 緩存chars中所有字母的數(shù)量
const charMap = new Map()
// 統(tǒng)計(jì)chars中所有字母的數(shù)量
for (const char of chars) {
charMap.set(char, (charMap.get(char) ?? 0) + 1)
}
// 為外部循環(huán)設(shè)置標(biāo)簽菲宴,便于直接退出
outer:
for (const word of words) {
// 創(chuàng)建一個(gè)新Map,用于統(tǒng)計(jì)chars的字母使用情況
const map = new Map(charMap)
// 遍歷word中的所有字母
for (const char of word) {
// 如果char在map中不存在趋急,表示chars無法拼寫該單詞,退出outer循環(huán)
if (!map.get(char)) {
continue outer
}
// 當(dāng)前字母被使用呜达,數(shù)量減一
map.set(char, map.get(char) - 1)
}
// 如果字母都被使用,表示chars可以拼寫出單詞,則將單詞長(zhǎng)度計(jì)入sum
sum += word.length
}
// sum為words中所有可被chars拼寫出的單詞長(zhǎng)度
return sum
};