# 1160 Find Words That Can Be Formed by Characters
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.
input: δΈεδΈ²ι£ε words θ·δΈεεδΈ² chars
output: εε³ words ε
¨ι¨η¬¦ε chars ηεδΈ²ι·εΊ¦
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.
/**
* @param {string[]} words
* @param {string} chars
* @return {number}
*/
var countCharacters = function(words, chars) {}
ζιΊΌθ§£
δΈεεδΈ²εͺθ½θ’«η¨δΈζ¬‘οΌζζ³ε°ζε ζ chars ει² map 裑οΌηΆεΎ words εε»ηζζ²ζ符ε
var countCharacters = function(words, chars) {
// η΅±θ¨ chars εζ―εΊηΎζ¬‘ζΈ
let myMap= new Map();
for(let i = 0; i< chars.length; i++){
if(myMap.has(chars[i])){
myMap.set(chars[i], myMap.get(chars[i]) + 1)
}else{
myMap.set(chars[i], 1)
}
}
// η΅±θ¨ζεΎη΅ζζΈε
let totalCount = 0
// δΈεδΈεζ―ε°
words.map(word => {
let allPass = true
// η΅±θ¨ word εεεεΊηΎζΈι
let wordMap = new Map();
for (let i = 0; i < word.length; i++) {
if(myMap.has(word[i])){
let count = !wordMap.get(word[i]) ? 1 : wordMap.get(word[i]) + 1;
wordMap.set(word[i], count)
}else{
allPass = false
break;
}
}
let lengthPass = true;
// ζ―ε°εΊηΎζ¬‘ζΈζζ²ζε€§ζΌ charsοΌε€§ζΌηθ©±ε°±δΈι
if(allPass){
let countLen = 0
wordMap.forEach((value, index) => {
countLen += value;
if(value > myMap.get(index)){
lengthPass = false
}
})
if( lengthPass){
totalCount += countLen;
}
}
//
})
return totalCount;
};
console.log(countCharacters(["catc","bt","hat","tree"],'atach'))
//faster than 84.68% of JavaScript online submissions
Last updated
Was this helpful?