題目的意思很簡單,就是要看字母表字符串能否拼出單詞,能拼出就把單詞的字母大小加上。
比較坑的是,每次拼寫,字母表中的每個字符只能用一次,不然的話可以用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;
}