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

【LeetCode面试150】——205同构字符串

博客昵称:沈小农学编程

作者简介:一名在读硕士,**定期更新相关算法面试题**,欢迎关注小弟!

PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘

题目难度:简单

默认优化目标:最小化时间复杂度。

Python默认为Python3。

目录

1 题目描述

2 题目解析

3 算法原理及代码实现

参考文献


1 题目描述

给定两个字符串 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 字符组成

2 题目解析

输入是两个字符串s和t,输出是布尔值。如果s中的字符能以某种方式映射到t,则说s和t是同构的。如果s和t同构,输出true;反之输出false。不同字符不能映射到同一个字符上。

 

3 算法原理及代码实现

构建两张哈希表,哈希表s2t以s中的字符为键值,t中的字符为值;哈希表t2s以t中的字符为键值,以s中的字符为值。当发生哈希冲突时,返回false。如果遍历完没有冲突,返回true。

 

时间复杂度O(n),空间复杂度O(\sum)

C++代码实现

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

Python代码实现

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        s2t = {}
        t2s = {}
        n = len(s)
        
        for i in range(n):
            x, y = s[i], t[i]
            if (x in s2t and s2t[x] != y) or (y in t2s and t2s[y] != x):
                return False
            s2t[x] = y
            t2s[y] = x
        
        return True

参考文献

力扣面试经典150题

力扣官方题解


http://www.kler.cn/news/293490.html

相关文章:

  • 解决解压缩时的错误提示 “无法成功完成操作, 因为文件包含病毒或者潜在垃圾文件“
  • 论文解读 | KDD2024 演化图上的森林矩阵快速计算
  • 【OpenCV1】虚拟环境的使用、opencv的使用、图像和视频的创建和显示
  • 政府招商引资管理数字化平台:渠道、意向客户、项目管理、招商载体、绩效一体化管理平台
  • Spring MVC思想 实践开发 核心组件 流程分析
  • 【go-zero】win启动rpc服务报错 panic: context deadline exceeded
  • 设计模式学习-命令模式
  • HTTP 方法
  • Redis 的内存淘汰策略详解
  • 电机驱动及编码器测速(基于STM32F103C8T6HAL库)
  • ARM32开发——GD32F4 DMA功能查询
  • windows手工杀毒-寻找可疑进程之线程
  • 如何在Selenium中使用Chrome DevTools进行交互
  • python的sqlalchemy使用@contextmanager来定义上下文管理器
  • shell脚本编程(正则表达式与grep +awk+sed+expect详解)
  • OpenCV中的颜色映射函数
  • [pytorch] --- pytorch基础之损失函数与反向传播
  • VUE3父子组件传参
  • Requests库对session的支持
  • PHP 项目流水线部署与错误问题解决
  • U盘数据危机应对:详解文件或目录损坏无法读取的恢复之道
  • SpringMVC启动与请求处理流程解析
  • 将网页保存为PDF---不分页
  • GIT | git提交注释自动添加信息头
  • echarts动态切换数据渲染(vue3 + echarts)
  • 5G移动网络运维实验(训)室解决方案
  • 逻辑回归与线性回归的目标函数和应用场景比较
  • 坐牢第三十六天(QT)
  • iOS——Block与内存管理
  • Kafka 实战演练:创建、配置与测试 Kafka全面教程