当前位置: 首页 > news >正文

LeetCode热题100--205

LeetCode热题100–205. 同构字符串

题目链接

题目类型: 哈希表、字符串

给定两个字符串 st ,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

示例 1:

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

示例 2:

输入:s = "foo", t = "bar"
输出:false

示例 3:

输入:s = "paper", t = "title"
输出:true

提示:

  • 1 <= s.length <= 5 * 104
  • t.length == s.length
  • st 由任意有效的 ASCII 字符组成

解题思路

  • 使用两个哈希表 ab
    • a记录 s → t的映射。
    • b记录 t → s的映射。
  • 遍历字符串,检查当前字符的映射是否冲突:(解题关键点)
    • 如果 s[i]已经映射到 t[i],但 a[s[i]] != t[i]→ 冲突。
    • 如果 t[i]已经映射到 s[i],但 b[t[i]] != s[i]→ 冲突。
  • 如果没有冲突,就建立双向映射关系。

通过代码

class Solution {
public:bool isIsomorphic(string s, string t) {unordered_map<char,char> a,b;for(int i=0; i<s.size(); i++){if(a[s[i]] != 0 && a[s[i]] != t[i] || b[t[i]] != 0 && b[t[i]] != s[i]){return false;}a[s[i]] = t[i];b[t[i]] = s[i];}return true;}
};

边界情况

(1)字符串长度不同

  • 题目保证 s.size() == t.size(),所以不需要额外检查。

(2)空字符串

  • s = ""t = ""true(空字符串是同构的)。

(3)字符映射到自身

  • s = "abc"t = "abc"true(每个字符映射到自身)。

(4)多个字符映射到同一个字符

  • s = "badc"t = "baba"falseac都映射到 b,冲突)。

5. 复杂度分析

操作时间复杂度空间复杂度
遍历字符串O(n)O(1)(最多 256 种 ASCII 字符)
哈希表查询O(1)O(1)
哈希表插入O(1)O(1)
  • 时间复杂度O(n)(遍历一次字符串)。
  • 空间复杂度O(1)(最多存储 256 种 ASCII 字符的映射)。

6. 总结

  1. 核心思想:使用双向哈希表检查字符映射是否唯一。
  2. 关键点
    • 检查 s → tt → s的映射是否一致。
    • 如果发现冲突,立即返回 false
  3. 优化空间
    • 可以用数组代替哈希表(因为 ASCII 字符范围固定)。
    • 但哈希表写法更直观,适合面试时快速实现。
http://www.lryc.cn/news/596805.html

相关文章:

  • Visual Studio中部署PaddleOCRv5 (借助ncnn框架)
  • Flink 状态管理设计详解:StateBackend、State、RocksDB和Namespace
  • 【笔记】Handy Multi-Agent Tutorial 第三章: CAMEL框架简介及实践(实践部分)
  • Redis原理之分布式锁
  • PowerShell自动化核对AD与HR系统账户信息实战指南
  • IDEA202403 超好用设置【持续更新】
  • ZooKeeper在Hadoop中的协同应用:从NameNode选主到分布式锁实现
  • 天津大学陈亚楠教授团队 ACS AEM:焦耳热超快合成非平衡态能源材料——毫秒级制备与跨体系性能突破
  • 昨天去看了电科金仓的发布会,有点东西!
  • 从 Linux 将文件下载到 Windows 的几种实用方法
  • 【AI智能体】Dify 开发与集成MCP服务实战操作详解
  • 嵌入式学习之路
  • Python笔记之跨文件实例化、跨文件调用、导入库
  • 为什么本地ip记录成0.0.0.1
  • 基于Python flask的常用AI工具功能数据分析与可视化系统设计与实现,技术包括LSTM、SVM、朴素贝叶斯三种算法,echart可视化
  • 慢 SQL接口性能优化实战
  • Fast Frequency Estimation Algorithm by Least Squares Phase Unwrapping
  • USB4.0:开启高速数据传输的新时代
  • 当if else比较多时候应该怎么避免?
  • MCP与企业数据集成:ERP、CRM、数据仓库的统一接入
  • #Linux权限管理:从“Permission denied“到系统安全大师
  • uniapp自定义圆形勾选框和全选框
  • iOS 抓包工具有哪些?2025实用指南与场景推荐
  • 重磅发布:Oracle ADG 一键自动化搭建脚本
  • 离线快速处理PDF格式转化的方案
  • 揭秘ThreadLocal核心原理与应用
  • Linux文件系统理解1
  • NLP自然语言处理的一些疑点整理
  • vue2的scoped 原理
  • 基于SpringBoot+MyBatis+MySQL+VUE实现的实习管理系统(附源码+数据库+毕业论文+项目部署视频教程+项目所需软件工具)