难度简单51
给你一份『词汇表』(字符串数组) words
和一张『字母表』(字符串) chars
。
假如你可以用 chars
中的『字母』(字符)拼写出 words
中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。
注意:每次拼写时,chars
中的每个字母都只能用一次。
返回词汇表 words
中你掌握的所有单词的 长度之和。
示例 1:
输入:words = ["cat","bt","hat","tree"], chars = "atach" 输出:6 解释: 可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。
使用哈希表 map<char,int>统计字母表中字符的数量,再统计词汇表中每个单词中字母出现的数量。
++chars_cnt[c]; 当字母出现时,数量加1
class Solution {
public:
int countCharacters(vector<string>& words, string chars) {
int res=0;
map<char,int> chars_cnt;
for(char c:chars)
{
++chars_cnt[c];
}
for(string s : words)
{
map<char,int> word_cnt;
for(char c : s)
{
++word_cnt[c];
}
int is_ans=1;
for(char c:s)
{
if(chars_cnt[c]<word_cnt[c])
{
is_ans=0;
}
}
if(is_ans) res+=s.size();
}
return res;
}
};