【华为OD机试真题】- 万能字符单词拼写(JS解答)

题目描述:
有一个字符串数组words和一个字符串chars。
假如可以用chars中的字母拼写出words中的某个“单词”(字符串),那么我们就认为你掌握了这个单词。
words的字符仅由 a-z英文小写字母组成。例如:abc
chars 由a-z 英文小写字母和“?”组成。其中英文问号“?”表示万能字符,能够在拼写时当做任意一个 英文字母。例如:"?"可以当做"a"等字母。
注意:每次拼写时,chars中的每个字母和万能字符都只能使用一次。
输出词汇表words中你掌握的所有单词的个数。没有掌握任何单词,则输出0。

输入描述:
第1行输入数组words的个数,记为N。
从第2行开始到第N+1行依次输入数组words的每个字符串元素。
第N+2行 输入字符串chars

输出描述:
输出一个整数,表示词汇表words中你掌握的单词个数。
补充说明:
1 <= words.length <= 100
1<=words[i].length, chars.length <= 100
所有字符串中都仅包含小写英文字母、英文问号

示例1
输入:
4
cat
bt
hat
tree
atach??
输出:
3
说明:
可以拼写字符串"cat"、“bt"和"hat”

JS参考解题:

function canSpell(word, chars) {
    let charCount = {};
    for (let char of chars) {
        charCount[char] = (charCount[char] || 0) + 1;
    }

    for (let char of word) {
        if (charCount[char] && charCount[char] > 0) {
            charCount[char]--;
        } else if (charCount['?'] && charCount['?'] > 0) {
            charCount['?']--;
        } else {
            return false;
        }
    }

    return true;
}

function countWords(words, chars) {
    let count = 0;
    for (let word of words) {
        if (canSpell(word, chars)) {
            count++;
        }
    }
    return count;
}

// 测试示例
let words = ['cat', 'bt', 'hat', 'tree'];
let chars = 'atach??';
console.log(countWords(words, chars));
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值