题目链接:拼写单词
题意:给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。
假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。
注意:每次拼写时,chars 中的每个字母都只能用一次。
返回词汇表 words 中你掌握的所有单词的 长度之和。
题解:暴力。类似hash?用一个数组统计chars的次数,再复制这个数组,每次在words里的word去遍历,出现不相同的就标记。能顺利遍历就记录一下这个word的长度。
代码:
1 class Solution { 2 public: 3 int mp[26] = {0}; 4 5 int countCharacters(vector<string>& words, string chars) { 6 int len = chars.size(); 7 for(int i = 0; i < len; i++){ 8 mp[chars[i] - 'a']++; 9 } //统计 10 11 int ans = 0; 12 int res[26]; //复制表 13 for(int i = 0; i < words.size(); i++){ 14 string word = words[i]; 15 memcpy(res,mp,sizeof(mp)); 16 int flag = 1; 17 for(int j = 0 ; j < word.size(); j++){ 18 if(res[word[j] - 'a'] == 0){ //如果没有这个字母 19 flag = 0; 20 break; 21 } 22 else res[word[j] - 'a']--; 23 } 24 if(flag) ans += word.size(); 25 } 26 27 return ans; 28 } 29 };