思路
这道题给出了一张单词表(数组words)和字母表chars,若chars当中的字母可以构成单词表中的某一个单词,则这个词算作已经学会的词。
需要注意的是有一个附加条件,字母表中每个字母只能用一次,最开始做的时候没有考虑这一点,导致出现了让人抓耳挠腮的错误。
解题思路
先用哈希表存储chars当中的字母,出现的字母++,没有出现的继续为0。之后做单词比较的时候,新建一个哈希表,每次使用某一个单词,就让这个表中对应位置++,当新表中某位置大于之前的表时,就表示这个单词学不会。
代码
int countCharacters(vector<string>& words, string chars) {
int size=chars.size();
if(size==0){return 0;}
//哈希表
int charnum[26]={0};
for(int i=0;i<size;i++){
charnum[chars[i]-'a']++;
}
int count=0,res=0,sizeword=words.size();
int size0,j;
if(sizeword==0){return 0;}
for(int i=0;i<sizeword;i++){
size0=words[i].size();
j=0;
int flag[26]={0};
while(j<size0){
if(flag[words[i][j]-'a']<charnum[words[i][j]-'a']){
count++;
flag[words[i][j]-'a']++;
}
j++;
}
if(count==size0){
res+=count;
}
count=0;
}
return res;
}
运行结果