1657. Determine if Two Strings Are Close
题目简介
/**
* @param {string} word1
* @param {string} word2
* @return {boolean}
*/
题目给我们两个字符串 word1 与 word2
要求我们判断两个字符串之间是否接近
接近的定义是在通过多次应用下列两种操作的情况下,能够将 word1 转换成 word2
- 任意交换两个字符
- 将现有的一个字符转换为现有的另一个字符;对现有的另一个字符也同步转换成现有的一个字符
解题思路
根据两种操作,可以看出两个字符串是否接近需要满足以下三个条件:
- 两个字符串长度相等
- 两个字符串需要有相同的字符组成(word1 有的字符 word2 必须得有;反之亦然)
- 字符串中字符出现次数一致(比如
aaabc与bbbac都是 321 符合条件;aaabc与aabcc一个是 321 一个是 221 不符合条件)
所以我们的任务就变成了判断这三种条件是否符合,在这里我使用数组的方式来记录
Javascript
/**
* @param {string} word1
* @param {string} word2
* @return {boolean}
*/
var closeStrings = function (word1, word2) {
const freq1 = Array(26).fill(0)
const freq2 = Array(26).fill(0)
const codeA = 'a'.charCodeAt(0)
for (const c of word1) {
freq1[c.charCodeAt(0) - codeA]++
}
for (const c of word2) {
freq2[c.charCodeAt(0) - codeA]++
}
// check the letters
for (let i = 0; i < 26; i++) {
if ((freq1[i] === 0 && freq2[i] !== 0) || (freq2[i] === 0 && freq1[i] !== 0)) {
return false
}
}
freq1.sort((a, b) => a - b)
freq2.sort((a, b) => a - b)
// check the occurrence
for (let i = 0; i < 26; i++) {
if (freq1[i] !== freq2[i]) {
return false
}
}
return true
};