[每日算法 - 華為機試] LeetCode1160. 拼寫單詞
題目入口
力扣
https://leetcode.cn/problems/find-words-that-can-be-formed-by-characters/
題目概述
給你一份『詞匯表』(字符串數組) 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。
方法一:暴力解法
java示例
import java.util.*;
class Solution {
public int countCharacters(String[] words, String chars) {
int res = 0;
Map<Character, Integer> map = new HashMap<Character, Integer>();
char[] arr = chars.toCharArray();
for(int i =0;i<arr.length;i++){
map.put(arr[i],map.getOrDefault(arr[i],0)+1);
}
for(int i=0;i<words.length;i++){
if(mastered(words[i],map)){res+=words[i].length();}
}
return res;
}
public boolean mastered(String word,Map<Character,Integer> map){
Map<Character, Integer> copiedMap = new HashMap<>();
copiedMap.putAll(map);
char[] arr = word.toCharArray();
for(int i=0;i<arr.length;i++){
if(copiedMap.getOrDefault(arr[i],0)<=0) { return false; }
copiedMap.put(arr[i],copiedMap.getOrDefault(arr[i],0)-1);
}
return true;
}
}
時間復雜度:O(S),S為字符集長度
空間復雜度:O(N)

浙公網安備 33010602011771號