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.
题解:
go:
func countCharacters(words []string, chars string) int {
n := len(chars)
dic := make([]byte, 26)
for i := 0; i < n; i++ {
dic[chars[i] - 'a']++
}
res := 0
for _, word := range words {
canForm := true
curDic := make([]byte, 26)
copy(curDic, dic)
for i := 0; i < len(word); i++ {
if curDic[word[i] - 'a'] > 0 {
curDic[word[i] - 'a']--
} else {
canForm = false
break
}
}
if canForm == true {
res += len(word)
}
}
return res
}