问题:
给定一个字符串数组,和一个字典字符串,
若字符串数组中的一个字符串中的所有字符,能够在字典字符串中一一对应找到(字典中每个字符只能用一次),则返回这个字符串的长度。
最终返回满足条件的所有字符串长度之和。
Example 1: Input: words = ["cat","bt","hat","tree"], chars = "atach" Output: 6 Explanation: The strings that can be formed are "cat" and "hat" so the answer is 3 + 3 = 6. Example 2: Input: words = ["hello","world","leetcode"], chars = "welldonehoneyr" Output: 10 Explanation: The strings that can be formed are "hello" and "world" so the answer is 5 + 5 = 10. Note: 1 <= words.length <= 1000 1 <= words[i].length, chars.length <= 100 All strings contain lowercase English letters only.
解法:
用dict[26]保存字典字符串中各个字符出现的次数。
再轮询字符串数组的每个字符串,
在dict中查找对应的字符,找到一个dict[i]--
因此,dict每次对比的时候需要copy一份dic用来临时判断,以不影响下一个字符串的判断。
代码参考:
1 class Solution { 2 public: 3 int getcount(string str, vector<int> dict){ 4 int cnt=0; 5 vector<int> dic(dict); 6 for(char s:str){ 7 if(dic[s-'a']<=0) return 0; 8 dic[s-'a']--; 9 cnt++; 10 } 11 return cnt; 12 } 13 int countCharacters(vector<string>& words, string chars) { 14 vector<int> dict(26); 15 int res=0; 16 for(char c:chars){ 17 dict[c-'a']++; 18 } 19 for(string str:words){ 20 res+=getcount(str, dict); 21 } 22 return res; 23 } 24 };