题目描述:
有一个字符串数组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));