方法一:哈希表暴力法
- 用一个哈希表来统计字母表中每个字符的个数
- 再依次统计每个单词的每个字符的个数
- 如果这个单词每个字符的数量都小于等于字母表中字符的个数就说明可以被拼写出来
class Solution {
public:
int countCharacters(vector<string>& words, string chars) {
//用哈希表记录字母表中的字符串的个数
map<char,int> letter;
//统计结果的单词的长度和
int res=0;
for(char ch:chars)
{
letter[ch]++;
}
for(string vocabulary:words)
{
//用于标记能不能拼出单词
int flag=1;
map<char,int> word;
//依次把单词放进哈希表里,统计每个单词中各个字符出现的次数
for(char ch:vocabulary)
{
word[ch]++;
}
//当单词中的有字符的数大于字母表的字符数时就不可以拼写出单词,把flag置为0
for(char ch:vocabulary)
{
if(word[ch]>letter[ch])
{
flag=0;
break;
}
}
//如果全部字符都小于等于字母表字符数时就可以拼写出单词,把单词的长度添加进掌握单词的长度里
if(flag==1)
res=res+vocabulary.size();
}
return res;
}
};