1657. Determine if Two Strings Are Close

Leetcode link

题目简介

/**
 * @param {string} word1
 * @param {string} word2
 * @return {boolean}
 */

题目给我们两个字符串 word1 与 word2

要求我们判断两个字符串之间是否接近

接近的定义是在通过多次应用下列两种操作的情况下,能够将 word1 转换成 word2

  1. 任意交换两个字符
  2. 将现有的一个字符转换为现有的另一个字符;对现有的另一个字符也同步转换成现有的一个字符

解题思路

根据两种操作,可以看出两个字符串是否接近需要满足以下三个条件:

  1. 两个字符串长度相等
  2. 两个字符串需要有相同的字符组成(word1 有的字符 word2 必须得有;反之亦然)
  3. 字符串中字符出现次数一致(比如 aaabcbbbac 都是 321 符合条件;aaabcaabcc 一个是 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
};

results matching ""

    No results matching ""