2068-检查两个字符串是否几乎相等
如果两个字符串 word1
和 word2
中从 'a'
到 'z'
每一个字母出现频率之差都 不超过 3
,那么我们称这两个字符串 word1
和 word2
几乎相等 。
给你两个长度都为 n
的字符串 word1
和 word2
,如果 word1
和 word2
几乎相等 ,请你返回true
,否则返回 false
。
一个字母 x
的出现 频率 指的是它在字符串中出现的次数。
示例 1:
**输入:** word1 = "aaaa", word2 = "bccb"
**输出:** false
**解释:** 字符串 "aaaa" 中有 4 个 'a' ,但是 "bccb" 中有 0 个 'a' 。
两者之差为 4 ,大于上限 3 。
示例 2:
**输入:** word1 = "abcdeef", word2 = "abaaacc"
**输出:** true
**解释:** word1 和 word2 中每个字母出现频率之差至多为 3 :
- 'a' 在 word1 中出现了 1 次,在 word2 中出现了 4 次,差为 3 。
- 'b' 在 word1 中出现了 1 次,在 word2 中出现了 1 次,差为 0 。
- 'c' 在 word1 中出现了 1 次,在 word2 中出现了 2 次,差为 1 。
- 'd' 在 word1 中出现了 1 次,在 word2 中出现了 0 次,差为 1 。
- 'e' 在 word1 中出现了 2 次,在 word2 中出现了 0 次,差为 2 。
- 'f' 在 word1 中出现了 1 次,在 word2 中出现了 0 次,差为 1 。
示例 3:
**输入:** word1 = "cccddabba", word2 = "babababab"
**输出:** true
**解释:** word1 和 word2 中每个字母出现频率之差至多为 3 :
- 'a' 在 word1 中出现了 2 次,在 word2 中出现了 4 次,差为 2 。
- 'b' 在 word1 中出现了 2 次,在 word2 中出现了 5 次,差为 3 。
- 'c' 在 word1 中出现了 3 次,在 word2 中出现了 0 次,差为 3 。
- 'd' 在 word1 中出现了 2 次,在 word2 中出现了 0 次,差为 2 。
提示:
n == word1.length == word2.length
1 <= n <= 100
word1
和word2
都只包含小写英文字母。
方法一:哈希表
思路与算法
我们可以用一个哈希表来维护两个字符串中每个字符的频数之差。哈希表中每个字符对应的默认值为 0。
首先我们遍历字符串 word1,对于其中的每个字符,我们将哈希表中该元素对应值加上 1;随后我们遍历字符串 word2,对于其中的每个字符,我们将哈希表中该元素对应值减去 1。最终,哈希表中每个字符的值即为该字符在 word1 中的频数与该字符在 word2 中的频数之差。
我们判断该哈希表中每个字符的值的绝对值是否小于等于 3:如果是,则说明两个字符串几乎相等,此时我们返回 true;反之则说明两个字符串并不几乎相等,此时返回 false。
代码
1 | class Solution { |
1 | class Solution: |
复杂度分析
时间复杂度:O(n + |\Sigma|),其中 n 为 word1 的长度,|\Sigma| 为字符串 word1 和 word2 的字符集大小。遍历字符串维护频数差哈希表的时间复杂度为 O(n),遍历频数差哈希表判断两字符串是否几乎相等的时间复杂度为 O(|\Sigma|)。
空间复杂度:O(|\Sigma|),即为频数差哈希表的空间开销。
Comments