题目的意思很简单,就是要看字母表字符串能否拼出单词,能拼出就把单词的字母大小加上。
比较坑的是,每次拼写,字母表中的每个字符只能用一次,不然的话可以用find函数,循环遍历的时候find一下看该字符串在不在字母表里就行了。
每个字符只能用一次,这意味着要么你记录这个字符用没用过,要么你先记录单词的数量,然后用一次减一次。
这里使用了哈希法,把字母表字符串的个数记录下来。然后循环遍历,每次遇到个数为0的数就退出(字母不够用了),遇到个数不为0则减1。
由于在一次遍历中,map被操作过,故遍历完这个词后,重新赋值初始map,保证每次字母表字符串都和原始一样。
int countCharacters(vector<string>& words, string chars)
{
int num = 0;
map <char, int> mymap,mymap2;
for(int i = 0; i < chars.size(); i++)
{
mymap[chars[i]] ++;
}
mymap2 = mymap;
for(int i = 0; i < words.size(); i ++)
{
for(int j = 0; j < words[i].size(); j ++)
{
if(string::npos == chars.find(words[i][j]))
{
break;
}//在a中查找b
// 如果等于0,等于说已经没这个字母了
mymap[words[i][j]] ==0 ? (j = words[i].size()) :(mymap[words[i][j]]--) ;
if(j == words[i].size()-1)
{
num += words[i].size();
}
}
mymap = mymap2;
}
return num;
}