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

embedded/2025/1/11 14:31:57/

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

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,则返回 Falseif s_to_t[char_s] != char_t:return Falseelse:# 如果不存在映射,则建立从 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,则返回 Falseif t_to_s[char_t] != char_s:return Falseelse:# 如果不存在映射,则建立从 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=0s=list(s)t=list(t)i=0j=0while i<len(s) and j<len(s):if s.index(s[i])==t.index(t[j]):a+=1i+=1j+=1else:return Falsereturn a==len(s)


http://www.ppmy.cn/embedded/120110.html

相关文章

C语言_回调函数和qsort

1. 回调函数 回调函数就是一个通过函数指针调用的函数。 通俗易懂些讲就是把函数的指针作为参数传递给另一个函数&#xff0c;当在另一个函数中通过这个指针调用其所指向的函数时&#xff0c;那这个通过指针被调用的函数就叫做回调函数。 先上一个模拟计算机的代码&#xff…

VMware ESXi 8.0U3 HPE (慧与) 定制版更新 OEM BIOS 2.7 支持 Windows Server 2025

VMware ESXi 8.0U3 HPE (慧与) 定制版更新 OEM BIOS 2.7 支持 Windows Server 2025 VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS HPE (慧与) 定制版 ESXi 8.0U3 标准版&#xff0c;Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立…

目前最好用的爬虫软件是那个?

作为一名数据工程师&#xff0c;三天两头要采集数据&#xff0c;用过十几种爬虫软件&#xff0c;也用过Python爬虫库&#xff0c;还是建议新手使用现成的软件比较方便。 这里推荐3款不错的自动化爬虫工具&#xff0c;八爪鱼、亮数据、Web Scraper 1. 八爪鱼爬虫 八爪鱼爬虫是一…

【docker】debian中配置docker(2024年9月)

首先Follow了一下菜鸟教程&#xff0c;然后遇到了curl的问题。 curl存在的问题 参见这篇文章。其中用到了vim进行编辑&#xff0c;笔者的环境是windows10putty&#xff0c;vim的粘贴操作参考这篇文章。 修改之后的curl没有问题了&#xff0c;成功把脚本下载下来了。 但是在…

【Python】Copier:高效的项目模板化工具

Copier 是一个开源的 Python 工具&#xff0c;用于基于项目模板快速生成新项目。它通过灵活的模板化系统&#xff0c;使开发者可以快速创建、维护和更新项目模板&#xff0c;从而自动化项目的初始化流程。无论是简单的文件复制&#xff0c;还是复杂的项目结构配置&#xff0c;C…

灵当CRM index.php接口SQL注入漏洞复现 [附POC]

文章目录 灵当CRM index.php接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 灵当CRM index.php接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技…

Linux:磁盘管理

一、静态分区管理 静态的分区方法不可以动态的增加或减少分区的容量。 1、磁盘分区-fdisk 该命令是用于查看磁盘分区情况&#xff0c;和分区管理的命令 命令格式&#xff1a;fdisk [选项] 设备文件名常用命令&#xff1a; -h&#xff1a;查看分区信息 fdisk系统常用命令&…

Ubuntu上安装Git:简单步骤指南

Git是目前世界上最流行的版本控制系统&#xff0c;广泛用于软件开发中。无论你是开发者还是版本控制的新手&#xff0c;Git都是你不可或缺的工具。本文将为你介绍如何在Ubuntu操作系统上安装Git。 什么是Git&#xff1f; Git是一个开源的分布式版本控制系统&#xff0c;由Lin…