【LeetCode每日一题】——205.同构字符串

news2024/12/24 8:54:21

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 哈希表

二【题目难度】

  • 简单

三【题目编号】

  • 205.同构字符串

四【题目描述】

  • 给定两个字符串 s 和 t ,判断它们是否是同构的。
  • 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
  • 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

五【题目示例】

  • 示例 1:

    • 输入:s = “egg”, t = “add”
    • 输出:true
  • 示例 2:

    • 输入:s = “foo”, t = “bar”
    • 输出:false
  • 示例 3:

    • 输入:s = “paper”, t = “title”
    • 输出:true

六【题目提示】

  • 1 < = s . l e n g t h < = 5 ∗ 1 0 4 1 <= s.length <= 5 * 10^4 1<=s.length<=5104
  • t . l e n g t h = = s . l e n g t h t.length == s.length t.length==s.length
  • s 和 t 由任意有效的 A S C I I 字符组成 s 和 t 由任意有效的 ASCII 字符组成 st由任意有效的ASCII字符组成

七【解题思路】

  • 利用哈希表的思想,我们应该保证:
    • 对于相同的字母,应该映射到同一个字母
    • 对于不同的字母,不能映射到同一个字母
  • 所以我们分别建立两个哈希表来完成上面的要求
  • 第一个哈希表来判断相同的字母是否映射到同一个字母,直接比较就可以,如果相同的字母不能映射到同一个字母,那么就返回false
  • 第二个哈希表来判断不同的字母是否映射到同一个字母,直接比较就可以,如果不同的字母可以映射到同一个字母,那么就返回false
  • 如果在循环中通过以上判断都没有返回false,那么说明两个字符串就是同构字符串,返回true即可

八【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n) n n n为传入的字符串的长度,传入的两个字符串长度相等
  • 空间复杂度: O ( ∣ Σ ∣ ) O(|Σ|) O(∣Σ∣) Σ Σ Σ为传入的字符串的字符集的大小

九【代码实现】

  1. Java语言版
class Solution {
    public boolean isIsomorphic(String s, String t) {
        int lenS = s.length();
        int lenT = t.length();
        if(lenS != lenT){
            return false;
        }
        HashMap<Character, Character> map = new HashMap<>();
        for(int i = 0;i < lenS;i++){
            if(map.containsKey(s.charAt(i))){
                if(map.get(s.charAt(i)) != t.charAt(i)){
                    return false;
                }
            }else{
                if(map.containsValue(t.charAt(i))){
                    return false;
                }
                map.put(s.charAt(i), t.charAt(i));
            }
        }
        return true;
    }
}
  1. C语言版
struct HashTable
{
    char key;
    char val;
    UT_hash_handle hh;
};

bool isIsomorphic(char * s, char * t)
{
    struct HashTable* mapS = NULL;
    struct HashTable* mapT = NULL;
    int lenS = strlen(s);
    int lenT = strlen(t);
    if(lenS != lenT)
    {
        return false;
    }
    for(int i = 0;i < lenS;i++)
    {
        char tempS = s[i];
        char tempT = t[i];
        struct HashTable* valS;
        struct HashTable* valT;
        HASH_FIND(hh, mapS, &tempS, sizeof(char), valT);
        HASH_FIND(hh, mapT, &tempT, sizeof(char), valS);
        if(valT != NULL)
        {
            if(valT->val != tempT)
            {
                return false;
            }
        }
        else
        {
            valT = malloc(sizeof(struct HashTable));
            valT->key = tempS;
            valT->val = tempT;
            HASH_ADD(hh, mapS, key, sizeof(char), valT);
        }
        if(valS != NULL)
        {
            if(valS->val != tempS)
            {
                return false;
            }
        }
        else
        {
            valS = malloc(sizeof(struct HashTable));
            valS->key = tempT;
            valS->val = tempS;
            HASH_ADD(hh, mapT, key, sizeof(char), valS);
        }
    }
    return true;
}
  1. Python语言版
class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        lenS = len(s)
        lenT = len(t)
        if lenS != lenT:
            return False
        mapS = {}
        mapT = {}
        for tempS, tempT in zip(s, t):
            if (tempS in mapS and mapS[tempS] != tempT) or (tempT in mapT and mapT[tempT] != tempS):
                return False
            mapS[tempS] = tempT
            mapT[tempT] = tempS
        return True
  1. C++语言版
class Solution {
public:
    bool isIsomorphic(string s, string t) {
        int lenS = s.size();
        int lenT = t.size();
        if(lenS != lenT){
            return false;
        }
        unordered_map<char, char> mapS;
        unordered_map<char, char> mapT;
        for(int i = 0;i < lenS;i++){
            char tempS = s[i];
            char tempT = t[i];
            if((mapS.count(tempS) && mapS[tempS] != tempT) || (mapT.count(tempT) && mapT[tempT] != tempS)){
                return false;
            }
            mapS[tempS] = tempT;
            mapT[tempT] = tempS;
        }
        return true;
    }
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/861597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Appium - 移动端自动测试框架,如何入门?

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 1、为什么要使用Appium&#xff1f; 2、如何搭建Appium工具环境?(超详细&#xff09; 3、通过demo演示Appium的使用 4、Appium如何…

【C++常见八股1】内存布局 | 参数压栈 | 构造析构调用 | 空类大小

内存布局 .text 代码段&#xff1a;存放二进制代码、字符串常量.data 段&#xff1a;存放已初始化全局变量、静态变量、常量.bss 段&#xff1a;未初始化全局变量&#xff0c;未初始化静态变量heap 堆区&#xff1a;new/malloc 手动分配的内存&#xff0c;需要手动释放stack 栈…

竞赛项目 深度学习图像风格迁移

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习图像风格迁移 - opencv python 该项目较为新颖&#xff0c;适合作为竞赛课题…

Redis_概述

1.redis概述 1.1 简介 截止到2021年12月 数据库排名https://db-engines.com/en/ranking redis(Remote Dictionary Server) 一个开源的key-value存储系统它支持存储的Value类型&#xff1a;包括String(字符串),list(链表),set(集合),zset(sorted set 有序集合),hash(哈希类型…

【C++11】列表初始化 | decltype操作符 | nullptr | STL的更新

文章目录 一.列表初始化1. 花括号初始化2. initializer_list 二.decltype三.nullptr四.STL的更新1.STL新增容器2.字符串转换函数3.容器中的一些新方法 一.列表初始化 1. 花括号初始化 { }的初始化 C98中&#xff0c;标准允许使用大括号{}对数组或者结构体元素进行统一的列表初…

Unity游戏源码分享-俄罗斯方块unity2017

Unity游戏源码分享-俄罗斯方块unity2017 工程地址&#xff1a; https://download.csdn.net/download/Highning0007/88204011

STM32 F103C8T6学习笔记3:串口配置—串口收发—自定义Printf函数

今日学习使用STM32 C8T6的串口&#xff0c;我们在经过学习笔记2的总结归纳可知&#xff0c;STM32 C8T6最小系统板上有三路串口&#xff0c;如下图&#xff1a; 今日我们就着手学习如何配置开通这些串口进行收发&#xff0c;这里不讲串口通信概念与基础&#xff0c;可以自行网上…

突破笔试:力扣全排列(medium)

1. 题目链接&#xff1a;46. 全排列 2. 题目描述&#xff1a;给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[…

Redis_安装、启动以及基本命令

2.Redis安装 2.1前置处理环境 VMware安装安装centOS的linux操作系统xshellxftp 2.2 配置虚拟机网络 按ctrlaltf2 切换到命令行 cd (/)目录 修改/etc/sysconfig/network-scripts/ifcfg-ens3 vi 命令 按insert表示插入 按ctrlesc退出修改状态 :wq 写入并退出 此文件必须保持一…

linux鲁班猫代码初尝试[编译镜像][修改根文件系统重编译]

编译镜像 官方百度云盘资料:https://doc.embedfire.com/linux/rk356x/quick_start/zh/latest/quick_start/baidu_cloud/baidu_cloud.html 解压虚拟机压缩包:"鲁班猫\8-SDK源码压缩包\开发环境虚拟机镜像\ubuntu20.04.7z"后既可以用VMware打开,打开后可以看到已经有…

探索数据之美:初步学习 Python 柱状图绘制

文章目录 一 基础柱状图1.1 创建简单柱状图1.2 反转x和y轴1.3 数值标签在右侧1.4 演示结果 二 基础时间线柱状图2.1 创建时间线2.2 时间线主题设置取值表2.3 演示结果 三 GDP动态柱状图绘制3.1 需求分析3.2 数据文件内容3.3 列表排序方法3.4 参考代码3.5 运行结果 一 基础柱状图…

libheif—— 1、Vs2017搭建libheif开发环境

HEIF&#xff08;高效图像文件格式&#xff09; 一种图片有损压缩格式&#xff0c;它的后缀名通常为".heic"或".heif"。 HEIF 是由运动图像专家组 &#xff08;MPEG&#xff09; 标准化的视觉媒体容器格式&#xff0c;用于存储和共享图像和图像序列。它基于…

第二章:CSS基础进阶-part1:CSS高级选择器

文章目录 一、 组合选择器二、属性选择器三、伪类选择器1、动态伪类选择器2、状态伪类选择器3、结构性伪类选择器4、否定伪类选择器 一、 组合选择器 后代选择器&#xff1a;E F子元素选择器&#xff1a; E>F相邻兄弟选择器&#xff1a;EF群组选择器&#xff1a;多个选择器…

模板的进阶

目录 1.非类型模板参数 2.模板特化 2.1概念 2.2函数模板特化 2.3类模板特化 2.3.1全特化 2.3.2偏特化 3.模板分离编译 3.1什么是分离编译 3.2 模板的分离编译 3.3解决方法 4. 模板总结 1.非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a…

smtplib.SMTPHeloError: (500, b‘Error: bad syntax‘)

如果你编写邮件收发工具的时候,有可能会遇到这个问题。这里直接给出解决办法。 目录 1、检查系统版本 2、点击右侧的更改适配器选项

Nginx负载均衡(重点)

正向代理 部署正向代理 server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://20.0.0.60:80…

【雕爷学编程】Arduino动手做(05)---热敏电阻传感器模块之热电效应的原理以及相关应用

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

SD-MTSP:光谱优化算法LSO求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、光谱优化算法LSO 光谱优化算法&#xff08;Light Spectrum Optimizer&#xff0c;LSO&#xff09;由Mohamed Abdel-Basset等人于2022年提出。 参考文献&#xff1a; [1]Abdel-Basset M, Mohamed R, Sallam KM, Chakrabortty RK. Light Spectrum Optimizer: A Novel Physi…

list的使用和模拟实现

目录 1.list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 2.为什么使用迭代器&#xff1f; 3.list的模拟实现 3.1完整代码 3.2代码解析 4.list与…

MySQL索引优化分析

MySQL索引优化分析 为什么你写的sql查询慢&#xff1f;为什么你建的索引常失效&#xff1f;通过本章内容&#xff0c;你将学会MySQL性能下降的原因&#xff0c;索引的简介&#xff0c;索引创建的原则&#xff0c;explain命令的使用&#xff0c;以及explain输出字段的意义。助你…