1160. 拼写单词
难度简单
给你一份『词汇表』(字符串数组) words
和一张『字母表』(字符串) chars
。
假如你可以用 chars
中的『字母』(字符)拼写出 words
中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。
注意:每次拼写(指拼写词汇表中的一个单词)时,chars
中的每个字母都只能用一次。
返回词汇表 words
中你掌握的所有单词的 长度之和。
示例 1:
输入:words = ["cat","bt","hat","tree"], chars = "atach" 输出:6 解释: 可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。
示例 2:
输入:words = ["hello","world","leetcode"], chars = "welldonehoneyr" 输出:10 解释: 可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。
提示:
1 <= words.length <= 1000
1 <= words[i].length, chars.length <= 100
- 所有字符串中都仅包含小写英文字母
思路:利用ASCII码表来进行存储,先将提供的字母个数都存起来,然后用words里的单词分别依次存储并与chars里的字母个数依次对比,利用flag来做标记,并将符合条件的单词字母都加到一起,最后返回答案。
int countCharacters(char ** words, int wordsSize, char * chars){ int a[26]={0},b[26]={0}; int n,sum=0; int j,i,flag=1,k; n=strlen(chars); for(int i=0;i<n;i++){ b[chars[i]-'a']++; } for(i=0;i<wordsSize;i++){ n=strlen(words[i]); for(j=0;j<n;j++){ a[words[i][j]-'a']++; if(a[words[i][j]-'a']>b[words[i][j]-'a']){ flag=0; break; } } if(flag==1){ sum+=n; } flag=1; for(k=0;k<26;k++){ a[k]=0; } } return sum; }