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

[leetcode刷题]面试经典150题之7同构字符串(简单)

这个题虽然是简单题,但是看了半天还是没啥好思路,最后看了解题学到了不少知识点

1.index() 函数查找序列中首次出现的元素索引

2.zip函数:用于将可迭代的对象(如列表、元组、字典等)作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象(注意,返回的其实是一个迭代器)。

例:

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)

# 输出:这是一个迭代器,所以直接打印看到的是它的内存地址
# 要查看其内容,可以将其转换为列表
print(list(zipped))  # 输出:[(1, 'a'), (2, 'b'), (3, 'c')]

3.字典中的一些用法

a={}
a[1]=2
print(a)

下面我会用上面的知识写两种解法

题目 

同构字符串

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

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

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

思考

两个不同的字符串,要对应他们的结构是否相同,首先能想到的就是字典是一一对应的,我们可以用字典去做。

代码1

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        # 初始化两个字典,用于分别记录 s -> t 和 t -> s 的映射关系
        s_to_t = {}
        t_to_s = {}
        
        # 使用 zip 函数同时遍历 s 和 t 的字符对
        for char_s, char_t in zip(s, t):
            # 检查是否已经有从 s 中 char_s 到 t 中 char_t 的映射
            if char_s in s_to_t:
                # 如果存在映射,且映射的目标字符不是当前的 char_t,则返回 False
                if s_to_t[char_s] != char_t:
                    return False
            else:
                # 如果不存在映射,则建立从 char_s 到 char_t 的映射
                s_to_t[char_s] = char_t
            
            # 同样地,检查是否已经有从 t 中 char_t 到 s 中 char_s 的映射
            if char_t in t_to_s:
                # 如果存在映射,且映射的目标字符不是当前的 char_s,则返回 False
                if t_to_s[char_t] != char_s:
                    return False
            else:
                # 如果不存在映射,则建立从 char_t 到 char_s 的映射
                t_to_s[char_t] = char_s
        
        # 如果循环结束时没有发现不符合条件的映射关系,则返回 True,表示 s 和 t 是同构的
        return True

从解题中看到一个更简单的,用index函数去做的

代码2

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        a=0
        s=list(s)
        t=list(t)
        i=0
        j=0
        while i<len(s) and j<len(s):
            if s.index(s[i])==t.index(t[j]):
                a+=1
                i+=1
                j+=1
            else:
                return False
        return a==len(s)


http://www.kler.cn/a/320984.html

相关文章:

  • java 数组 拼接 详解
  • 【征稿倒计时!华南理工大学主办 | IEEE出版 | EI检索稳定】2024智能机器人与自动控制国际学术会议 (IRAC 2024)
  • Fish Agent V0.13B:Fish Audio的语音处理新突破,AI语音助手的未来已来!
  • ubuntu 22.04 shell
  • C/C++静态库引用过程中出现符号未定义的处理方式
  • 【Docker】Mac安装Docker Desktop导致磁盘剩余空间较少问题如何解决?
  • 数据库 - MySQL数据查询
  • 智能仓库|基于springBoot的智能无人仓库管理设计与实现(附项目源码+论文+数据库)
  • 克隆GitHub仓库中的一个文件夹
  • react hooks--useReducer
  • 电脑USB端口禁止软件有哪些?什么软件能指定USB端口禁用?分享四款好用软件!
  • Java | Leetcode Java题解之第420题强密码检验器
  • 微调大模型(Finetuning Large Language Models)—Why Finetune(一)
  • 目标检测——VOC2007数据集
  • Git 安装教程
  • 什么是共享旅游卡?解析共享旅游创业项目认知与代理攻略
  • 代理IP对于网络爬虫业务的重要性
  • 使用集成学习对不同的机器学习方法进行集成
  • AWS账单不支付账号会停用吗?
  • 拥塞控制算法的 rtt 公平性
  • webpack4 target:“electron-renderer“ 打包加速配置
  • python:django项目知识点01——前期配置、用户管理、权限核验、django-orm
  • C++之分割字符串的两种方式
  • CentOS Stream 9部署Redis
  • Docker 安装 Apache(图文教程)
  • FPGA学习--verlog基础语法篇