LeetCode:205. 同构字符串 - JavaScript 解决方案 🚀

🚀 问题描述

如果两个字符串 st 满足以下条件,则它们是同构的:

  • s 中的每个字符都可以被替换为 t 中的唯一字符。
  • s 中字符的顺序在 t 中得以保留。
  • s 中的两个字符不能映射到 t 中的同一个字符,反之亦然。

💡 示例

示例 1

js 复制代码
输入:s = "egg", t = "add"
输出:true
解释:'e' 映射到 'a','g' 映射到 'd'。

示例 2

js 复制代码
输入:s = "foo", t = "bar"
输出:false
解释:'o' 不能同时映射到 'a' 和 'r'。

示例 3

js 复制代码
输入:s = "paper", t = "title"
输出:true
解释:'p' 映射到 't','a' 映射到 'i',依此类推。

🏆 JavaScript 解决方案

我们使用 两个哈希表 来解决这个问题:

  • s 中的字符映射到 t 中的字符。
  • 确保 s 中的两个字符不会映射到 t 中的同一个字符。

实现代码

js 复制代码
var isIsomorphic = function(s, t) {
    if (s.length !== t.length) return false;

    const mapST = {}; // s 到 t 的映射
    const mapTS = {}; // t 到 s 的映射

    for (let i = 0; i < s.length; i++) {
        const charS = s[i];
        const charT = t[i];

        if ((mapST[charS] && mapST[charS] !== charT) ||
            (mapTS[charT] && mapTS[charT] !== charS)) {
            return false;
        }

        mapST[charS] = charT;
        mapTS[charT] = charS;
        
        console.log('mapST', mapST)
        console.log('charT', charT)
    }

    return true;
};

console.log(isIsomorphic('egg', 'add'))
// console.log(isIsomorphic('foo', 'bar'))
// console.log(isIsomorphic('paper', 'title'))

🔍 工作原理

  1. 检查长度
    • 如果两个字符串长度不同,它们不可能是同构的。
  1. 使用两个映射表
    • mapST:将 s 中的字符映射到 t 中的字符。
    • mapTS:将 t 中的字符映射到 s 中的字符。
  1. 遍历字符
    • 对于 st 中的每对字符,检查映射是否一致。
    • 如果不一致,返回 false
  1. 返回 true
    • 如果所有字符的映射都一致,则这两个字符串是同构的。

🔑 复杂度分析

  • 时间复杂度O(n),其中 n 是字符串 s(或 t)的长度。
    • 每个字符只会被处理一次。
  • 空间复杂度O(1),因为哈希表最多可以存储 256 个条目(ASCII 字符)。

📋 手动运行示例

输入:s = "egg", t = "add"

输出:true

✨ 面试技巧

  1. 边界情况
    • 不同长度的字符串:s = "abc", t = "ab"
    • 单字符字符串:s = "a", t = "a"
    • 重复字符:s = "aaa", t = "bbb"
  1. 讨论两个映射表
    • 需要双向映射以避免冲突。
  1. 优化
    • 强调这种方法的时间复杂度为 O(n),这是解决此问题的最佳方法。

LeetCode: leetcode.com/problems/is...

原文: dev.to/rahulgithub...

相关推荐
格林威5 小时前
常规线扫描镜头有哪些类型?能做什么?
人工智能·深度学习·数码相机·算法·计算机视觉·视觉检测·工业镜头
程序员莫小特7 小时前
老题新解|大整数加法
数据结构·c++·算法
过往入尘土8 小时前
服务端与客户端的简单链接
人工智能·python·算法·pycharm·大模型
zycoder.8 小时前
力扣面试经典150题day1第一题(lc88),第二题(lc27)
算法·leetcode·面试
蒙奇D索大9 小时前
【数据结构】考研数据结构核心考点:二叉排序树(BST)全方位详解与代码实现
数据结构·笔记·学习·考研·算法·改行学it
智驱力人工智能9 小时前
工厂抽烟检测系统 智能化安全管控新方案 加油站吸烟检测技术 吸烟行为智能监测
人工智能·算法·安全·边缘计算·抽烟检测算法·工厂抽烟检测系统·吸烟监测
程序员爱钓鱼10 小时前
Go语言实战案例——进阶与部署篇:编写Makefile自动构建Go项目
后端·算法·go
_Power_Y10 小时前
Java面试常用算法api速刷
java·算法·面试
艾醒(AiXing-w)10 小时前
大模型面试题剖析:模型微调中冷启动与热启动的概念、阶段与实例解析
人工智能·深度学习·算法·语言模型·自然语言处理
天选之女wow11 小时前
【代码随想录算法训练营——Day32】动态规划——509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
算法·leetcode·动态规划