classSolution { publicintcountCharacters(String[] words, String chars) { Map<Character, Integer> charsCnt = newHashMap<Character, Integer>(); intlength= chars.length(); for (inti=0; i < length; ++i) { charc= chars.charAt(i); charsCnt.put(c, charsCnt.getOrDefault(c, 0) + 1); } intans=0; for (String word : words) { Map<Character, Integer> wordCnt = newHashMap<Character, Integer>(); intwordLength= word.length(); for (inti=0; i < wordLength; ++i) { charc= word.charAt(i); wordCnt.put(c, wordCnt.getOrDefault(c, 0) + 1); } booleanisAns=true; for (inti=0; i < wordLength; ++i) { charc= word.charAt(i); if (charsCnt.getOrDefault(c, 0) < wordCnt.getOrDefault(c, 0)) { isAns = false; break; } } if (isAns) { ans += word.length(); } } return ans; } }
[sol1-Python3]
1 2 3 4 5 6 7 8 9 10 11 12
classSolution: defcountCharacters(self, words: List[str], chars: str) -> int: chars_cnt = collections.Counter(chars) ans = 0 for word in words: word_cnt = collections.Counter(word) for c in word_cnt: if chars_cnt[c] < word_cnt[c]: break else: ans += len(word) return ans
复杂度分析
时间复杂度:O(n),其中 n 为所有字符串的长度和。我们需要遍历每个字符串,包括 chars 以及数组 words 中的每个单词。
空间复杂度:O(S),其中 S 为字符集大小,在本题中 S 的值为 26(所有字符串仅包含小写字母)。程序运行过程中,最多同时存在两个哈希表,使用的空间均不超过字符集大小 S,因此空间复杂度为 O(S)。