1112. Find Words That Can Be Formed by Characters
Difficulty: Easy
Topics: Array, Hash Table
Similar Questions:
Problem:
You are given an array of strings words
and a string chars
.
A string is good if it can be formed by characters from chars
(each character can only be used once).
Return the sum of lengths of all good strings in words
.
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.
Solutions:
class Solution {
public:
int countCharacters(vector<string>& words, string chars) {
unordered_map<char, int> charCount;
for (auto c : chars) {
++charCount[c];
}
int ret = 0;
for (auto& word : words) {
if (valid(word, charCount)) {
ret += word.length();
}
}
return ret;
}
private:
bool valid(string& word, unordered_map<char, int> charCount) {
for (auto c : word) {
if ((--charCount[c]) < 0 ) return false;
}
return true;
}
};