开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情
题目描述
如果两个字符串 word1 和 word2 中从 'a' 到 'z' 每一个字母出现频率之差都 不超过 3 ,那么我们称这两个字符串 word1 和 word2 几乎相等 。
给你两个长度都为 n 的字符串 word1 和 word2 ,如果 word1 和 word2 几乎相等 ,请你返回 true ,否则返回 false 。
一个字母 x 的出现 频率 指的是它在字符串中出现的次数。
来源:力扣(LeetCode)
- 示例 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 。
思路分析
根据题意可知,题目给出两个字符串word1,word2,判断两个字符串是否是几乎相等。啥叫几乎相等呢?指的是两个字符串中从 'a' 到 'z' 每一个字母出现频率之差都 不超过 3 ,那么就可以说这两个字符串几乎相等。
首先计算出两个字符串中每个字母在字符串中出现的次数,用Map对象存着,然后再循环两个Map对象,比对相同字符在两个字符串中出现次数的差值是否大于3;还有一种情况就是一个字符串中里面的字符出现的次数超过3次,并且另一个字符串没有这个字符,所以,这种就可以直接暂停,他就不是几乎相等了。
AC代码
function solution(word1, word2) {
let map1 = new Map();
let map2 = new Map();
for(let i=0; i<word1.length; i++) {
if(map1.has(word1[i])) {
map1.set(word1[i], map1.get(word1[i]) + 1)
}else{
map1.set(word1[i], 1)
}
if(!word2.includes(word1[i]) && map1.get(word1[i]) > 3) {
console.log(false);
return false;
}
}
for(let i=0; i<word2.length; i++) {
if(map2.has(word2[i])) {
map2.set(word2[i], map2.get(word2[i]) + 1)
}else{
map2.set(word2[i], 1)
}
if(!word1.includes(word2[i]) && map2.get(word2[i]) > 3) {
console.log(false);
return false;
}
}
for(let [key, value] of map1) {
for(let [i, val] of map2) {
if(key === i && Math.abs(value - val) > 3) {
console.log(false);
return false;
}
}
}
console.log(true)
};
let word1 = "aaaa", word2 = "bccb"
solution(word1, word2);