-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy path1160.FindWordsThatCanBeFormedbyCharacters.py
51 lines (46 loc) · 1.72 KB
/
1160.FindWordsThatCanBeFormedbyCharacters.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"""
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:
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:
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. 1 <= words.length <= 1000
2. 1 <= words[i].length, chars.length <= 100
3. All strings contain lowercase English letters only.
"""
#Diffculty: Easy
#36 / 36 test cases passed.
#Runtime: 104 ms
#Memory Usage: 14.5 MB
#Runtime: 104 ms, faster than 87.77% of Python3 online submissions for Find Words That Can Be Formed by Characters.
#Memory Usage: 14.5 MB, less than 15.39% of Python3 online submissions for Find Words That Can Be Formed by Characters.
class Solution:
def countCharacters(self, words: List[str], chars: str) -> int:
count = 0
chrs = {}
for char in chars:
if char not in chrs:
chrs[char] = 0
chrs[char] += 1
for word in words:
letters = set(word)
flag = True
for letter in letters:
if letter not in chrs or word.count(letter) > chrs[letter]:
flag = False
break
if flag:
count += len(word)
return count