1941-检查是否所有字符出现次数相同
给你一个字符串 s
,如果 s
是一个 好 字符串,请你返回 true
,否则请返回 false
。
如果 s
中出现过的 所有 字符的出现次数 相同 ,那么我们称字符串 s
是 好 字符串。
示例 1:
**输入:** s = "abacbc"
**输出:** true
**解释:** s 中出现过的字符为 'a','b' 和 'c' 。s 中所有字符均出现 2 次。
示例 2:
**输入:** s = "aaabb"
**输出:** false
**解释:** s 中出现过的字符为 'a' 和 'b' 。
'a' 出现了 3 次,'b' 出现了 2 次,两者出现次数不同。
提示:
1 <= s.length <= 1000
s
只包含小写英文字母。
方法一:统计每个字符的频数
思路与算法
首先,我们遍历字符串 s,并用哈希表 freq 统计每个字符的频数。随后,我们需要检查哈希表 freq 中每个字符的频数是否相等。
我们可以计算出满足要求时每个字符的理论频数 occ} = \textit{s.size}() / \textit{freq.size}(),并比较 freq 中每个字符的频数是否与 occ 相等。如果全部相等,那么说明符合要求,此时应返回 true 作为答案,反之亦然。
为了避免无法整除产生浮点数与整数的比较,我们可以在计算 occ 时用整除来代替除法,此时该判断方法依旧有效。
代码
1 | class Solution { |
1 | from collections import Counter |
复杂度分析
时间复杂度:O(n + |\Sigma|),其中 n 为 s 的长度,|\Sigma| 为字符集的大小。遍历 s 生成字符频数哈希表的时间复杂度为 O(n),遍历所有频数判断是否相等的时间复杂度为 O(|\Sigma|)。
空间复杂度:O(|\Sigma|),即为字符频数哈希表和频数哈希集合的空间复杂度。
Comments