当前位置: 首页 > 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.xdnf.cn/news/1175077.html

相关文章:

  • 糖尿病数据分析:血压与年龄关系可视化
  • 变频器带动电机:全方位解析参数变化
  • SparkSQL 聚合函数 MAX 对 NULL 值的处理
  • Linux -- 进程【下】
  • Python Day22 - 复习日
  • 如何用 Kafka + Redis + 线程池搭建高吞吐异步消息处理架构
  • 数据结构自学Day13 -- 快速排序--“前后指针法”
  • 西门子 S7-1500分布式 I/O通信 :PROFINET IO 与 PROFIBUS DP详解(下)
  • 电流、电压采集电路分析
  • 轻量化RTSP视频通路实践:采集即服务、播放即模块的工程解读
  • 【Windows命令手册】Windows中的常用命令,并与 Linux 做比较
  • Zookeeper学习专栏(七):集群监控与管理
  • FastGPT + Kymo:解锁企业专属知识库与智能体开发新体验
  • 【LeetCode 热题 100】78. 子集——(解法二)回溯+选哪个
  • Unity × RTMP × 头显设备:打造沉浸式工业远控视频系统的完整方案
  • AI营销核心技术解析:运作机制与行业应用实例
  • 炬森精密:缓冲滑轨的创新力量,重塑家居静音与安全新体验
  • 力扣MySQL(1)
  • 解构未来金融:深入剖析DeFi与去中心化交易所(DEX)的技术架构
  • 力扣(LeetCode) ——轮转数组(C语言)
  • Linux 723 磁盘配额 限制用户写入 quota;snap快照原理
  • GraphQL批量查询优化:DataLoader如何让数据库访问速度飞起来?
  • Android 测试全指南:单元测试与UI测试框架详解
  • 用马尔可夫模型进行自动驾驶安全分析
  • Docker Desktop 打包Unity WebGL 程序,在Docker 中运行Unity WebGL 程序
  • 【Linux系统编程】基础指令
  • MYSQL 笔记3
  • 天津大学陈亚楠教授团队 ACS AEM:焦耳热超快合成非平衡态能源材料——毫秒级制备与跨体系性能突破
  • 2025-07-23vscode+cline使用笔记
  • springcloud环境和工程搭建