★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ?微信公众号:为敢(WeiGanTechnologies) ?博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
?微信公众号:为敢(WeiGanTechnologies)
?博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
?GitHub地址:https://github.com/strengthen/LeetCode
?原文地址:https://www.cnblogs.com/strengthen/p/11371954.html
?如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
?原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
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.
给你一份『词汇表』(字符串数组) 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
- 所有字符串中都仅包含小写英文字母
Runtime: 920 ms Memory Usage: 21 MB
1 class Solution { 2 func countCharacters(_ words: [String], _ chars: String) -> Int { 3 var A:[Int:Int] = [Int:Int]() 4 let arrChars:[Int] = Array(chars).map{$0.ascii} 5 for c in arrChars 6 { 7 A[c - 97,default:0] += 1 8 } 9 var ret:Int = 0 10 for s in words 11 { 12 var cnt:[Int:Int] = [Int:Int]() 13 let arrS:[Int] = Array(s).map{$0.ascii} 14 for c in arrS 15 { 16 cnt[c - 97,default:0] += 1 17 } 18 var found:Bool = false 19 for k in 0..<26 20 { 21 if cnt[k,default:0] > A[k,default:0] 22 { 23 found = true 24 } 25 } 26 if !found 27 { 28 ret += s.count 29 } 30 } 31 return ret 32 } 33 } 34 35 //Character扩展 36 extension Character 37 { 38 //Character转ASCII整数值(定义小写为整数值) 39 var ascii: Int { 40 get { 41 return Int(self.unicodeScalars.first?.value ?? 0) 42 } 43 } 44 }