【Python3】【力扣题】242. 有效的字母异位词

【力扣题】题目描述:

【Python3】代码:

1、解题思路:若字符串长度相同,依次遍历元素,比较两个字符串的该元素个数是否相同。【耗时长】

知识点:len(...):获取序列(字符串、列表等)长度。

              序列.count(...):统计序列中指定元素的个数。

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        # 耗时长
        if len(s) != len(t): return False
        for x in s:
            if s.count(x) != t.count(x): return False
        return True

2、解题思路:哈希表。

本题:两个字符串中只有小写字母。可用长度为26的列表。也可用字典(或字典子类)。

(2-1)一个列表。若字符串长度相同,遍历其中一个字符串,记录字母的个数;再遍历另一个字符串,从列表中减去字母的个数,若列表中有元素小于0,则有不一样的字母。

知识点:[ x ] * n:列表中的元素x重复n次,即列表中有n个x。

              ord(...):获取字符的ascii值或unicode数值。

注解:res[ord(x) - ord('a')]:列表res中以该字母与字母a的距离(ascii/unicode)作为索引号。

           字符串长度相同,若一个字符串有的字母,另一个字符串没有该字母,则列表中某元素必定大于0也必定某元素小于0,因此判断小于0即可。

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t): return False
        res = [0] * 26
        for x in s:
            res[ord(x) - ord('a')] += 1
        for y in t:
            res[ord(y) - ord('a')] -= 1
            if (res[ord(y) - ord('a')]) < 0: return False
        return True

(2-2)若字符串长度相同,同时遍历两个字符串,其中一个字符串记录字母的个数,另一个字符串从列表中减去字母的个数,若两个字符串中字母个数都相同,最终列表中只有元素0。

① 一个列表。

知识点:zip(a,b):将多个可迭代的对象,按对应位置把元素打包成一个个元组,最终是由元组组成的列表。

              set(...):转为集合。集合中的元素不重复(即去重)。

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t): return False
        res = [0] * 26
        for x,y in zip(s,t):
            res[ord(x) - ord('a')] += 1
            res[ord(y) - ord('a')] -= 1
        if len(set(res)) != 1: return False
        return True

② 一个字典。

知识点:collections.defaultdict(...):字典子类。参数为工厂函数,例如:int。

              字典.values():返回可迭代的字典中所有值。

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        from collections import defaultdict
        if len(s) != len(t): return False
        res = defaultdict(int)
        for x,y in zip(s,t):
            res[x] += 1
            res[y] -= 1
        if len(set(res.values())) != 1: return False
        return True

(2-3)若字符串长度相同,遍历两个字符串,分别统计各字母的个数,判断两个列表是否相同。

① 两个列表。

注解:res1, res2 = [0] * 26, [0] * 26 :即res1,res2都是有26个0的列表,[0,0,...0]。

           return res1 == res2 :若res1的值和res2的值相同,返回True,不同返回False。

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t): return False
        res1, res2 = [0] * 26, [0] * 26
        for x,y in zip(s,t):
            res1[ord(x) - ord('a')] += 1
            res2[ord(y) - ord('a')] += 1
        return res1 == res2

② 两个字典。

知识点:字典[键]:获取键对应的值。可赋值,即字典[键]=值。

               字典.get(键,默认值):获取键的值,若没有该键,返回默认值。

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t): return False
        res1 = {}
        res2 = {}
        for x in s:
            res1[x] = res1.get(x,0) + 1
        for y in t:
            res2[y] = res2.get(y,0) + 1
        return res1 == res2

3、解题思路:若字符串长度相同,分别用计数器记录字母出现的次数,判断计数器是否相同。

知识点:collections.Counter():字典子类。计数器,以字典形式记录元素以及其个数。

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        from collections import Counter
        if len(s) != len(t): return False
        return Counter(s) == Counter(t)

4、解题思路:排序。若字符串长度相同,分别将两个字符串排序后,判断是否相同。

知识点:sorted(...):将序列(字符串、列表等)排序,返回排序后的新列表。

              operator.eq(a,b):比较两个字符串、列表等是否相等。与a==b相同。

补充:operator 模块提供了一套与 Python 的内置运算符对应的高效率函数。

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t): return False
        return sorted(s) == sorted(t)
        # 或者
        from operator import eq
        if len(s) != len(t): return False
        return eq(sorted(s),sorted(t))

注:先判断两个字符串的长度是否相同,若相同,再比较字母。可提高一点速度。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新零售时代,传统便利店如何转型?

在零售批发业&#xff0c;如何降低各环节成本、提高业务运转效率、更科学地了解客户服务客户&#xff0c;是每家企业在激烈竞争中需要思考的课题。 对零售批发企业来说&#xff0c;这些问题或许由来已久&#xff1a; &#xff08;1&#xff09;如何对各岗位的员工进行科学的考…

若依框架前后端分离版,集成数据库版本控制flyway

在admin模块的pom.xml增加依赖 <!-- 数据库版本控制 --><dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>7.15.0</version></dependency>在admin模块下的resources 的配置文…

微信机器人接口开发

E云 是一套完整的的第三方服务平台&#xff0c;包含微信API服务、企微API服务、SCRM系统定制、企微系统定制、服务类软件定制等模块&#xff0c;本文档主要讲述个微API服务相关&#xff0c;以下简称API&#xff0c;它能处理用户微信中的各种事件&#xff0c;提供了开发者与个微…

OceanMind海睿思再次携手中冶华天,持续助力数字化转型升级!

近日&#xff0c;中新赛克海睿思 再次与 世界500强企业旗下重要骨干企业——中冶华天工程技术有限公司&#xff08;以下简称“中冶华天”&#xff09;达成深度战略合作&#xff0c;为中冶华天提供智能风控分析平台、智能数仓及指标管理平台等服务&#xff0c;携手推进中冶华天“…

Mac电脑Visio文件编辑查看软件推荐Visio Viewer for Mac

mac版Visio Viewer功能特色 在Mac OS X上查看Visio绘图和图表 在Mac OS X上轻松查看MS Visio文件 在Mac上快速方便地打开并阅读Visio文件&#xff08;.vsd&#xff0c;.vsdx&#xff09;。 支持通过放大&#xff0c;缩小&#xff0c;旋转&#xff0c;文本选择和复制&#xff0…

创新,无处不在的便利体验——基于智能视频技术的安防监控系统EasyCVR

随着科技的迅猛发展&#xff0c;基于智能视频和语音技术的EasyCVR智能安防监控系统正以惊人的速度改变我们的生活。EasyCVR通过结合先进的视频分析、人工智能和大数据技术&#xff0c;为用户提供了更加智能、便利的安全保护体验&#xff0c;大大提升了安全性和便利性。本文将介…

web应用程序、Django框架的学习

web应用程序 什么是web? Web应用程序是一种可以通过Web访问的应用程序,用户只需要有浏览器即可&#xff0c;不需要再安装其他软件 案例&#xff1a; 淘宝网、京东网、博客园、等都是基于web应用的程序 应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序&#xff0c…

2011年03月31日 Go生态洞察:Godoc —— Go代码的文档化

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

list部分接口模拟实现(c++)

List list简介list基本框架list构造函数list_node结构体的默认构造list类的默认构造 push_back()iteartor迭代器迭代器里面的其他接口const迭代器通过模板参数实现复用operator->() insert()erase()clear()析构函数迭代器区间构造拷贝构造operator() list简介 - list可以在…

一篇简述 Linux 移植与系统启动

1、Linux系统启动与U-Boot 所谓移植就是把程序代码从一种运行环境转移到另一种运行环境。对于内核移植来说&#xff0c;主要是从一种硬件平台转移到另一种硬件平台上运行。 体系结构级别的移植是指在不同体系结构平台上Linux内核的移植&#xff0c;例如&#xff0c;在ARM、MI…

前端项目导入vue和element

1.安装nodejs 下载链接https://cdn.npmmirror.com/binaries/node/v18.18.0/node-v18.18.0-x64.msi 进入cmd 命令行模式 管理员身份运行 输入 &#xff08;node -v&#xff09;能看到版本号 npm config set prefix "C:\Program Files\nodejs" 默认路径 npm config…

补偿 IIR 滤波器引入的延迟

补偿 IIR 滤波器引入的延迟 对信号进行滤波会引入延迟。这意味着相对于输入&#xff0c;输出信号在时间上有所偏移。 无限冲激响应滤波器对某些频率分量的延迟可能比其他频率分量更长。它们会使输入信号呈现明显失真。函数 filtfilt 可补偿此类滤波器引入的延迟&#xff0c;从…

asp.net校园招聘管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 校园招聘管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言开发 应用技术&#xff1a;asp.net c#s…

PHP编写采集药品官方数据的程序

在 PHP 中编写爬虫程序&#xff0c;首先我们需要引入一些必要的库&#xff0c;如 curl 和 file_get_contents。然后&#xff0c;我们需要设置爬虫ip信息&#xff0c;以便我们可以从指定的爬虫ip服务器上获取数据。 // 引入必要的库 require_once curl.php;// 设置爬虫ip信息 $p…

【vue+el-upload+vue-cropper】vue图片上传,vue-cropper图片裁剪后上传

一. 先看效果演示 二. 图片上传 用的el-upload加el-image组件 html部分 <el-dialog> ...//无关代码已省略<div v-for"item in imgArr" :key"item.index"><span>{{ item.name }}</span><el-upload action"#" list-t…

客服呼叫中心的语音质检工作

语音质检是呼叫中心运营中必不可缺少的一个环节&#xff0c;呼叫中心语音质检对坐席起着直接监督的作用&#xff0c;也正是这种监督约束推动着客服人员不断提升自身的业务能力。 而客服呼叫中心的质检结果中还蕴藏了大量有价值的信息&#xff0c;可以通过日常的质检工作真正发现…

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(一):驱动安装与建立连接

XPCIE1032H功能简介 XPCIE1032H是一款基于PCI Express的EtherCAT总线运动控制卡&#xff0c;可选6-64轴运动控制&#xff0c;支持多路高速数字输入输出&#xff0c;可轻松实现多轴同步控制和高速数据传输。 XPCIE1032H集成了强大的运动控制功能&#xff0c;结合MotionRT7运动…

OTA包添加自定义内容

起因 新开一条线&#xff0c;需要上传的OTA包里加点内容&#xff0c;好让后台校验它是否是当前这条线(短期最小改动)。 开整 之前看过ota包结构&#xff0c;整包和差分包里都有一个payload_properties.txt文件&#xff0c;所以最简单的就是给这个txt文件里追加点自定义内容&…

制造企业如何做好进销存管理工作?

本文你将了解&#xff1a;什么是进销存管理系统&#xff1f;国内制造信息化的发展现状如何&#xff1f;进销存管理系统的功能有哪些&#xff1f; 接下来搭建进销存管理系统教学中用到的图片和系统都来自简道云的进销存管理系统 这也是我们公司目前正在用的进销存管理系统&…

el-form-item的label的长度单独改掉,用vue3样式穿透的写法,加上css选择器查找特定的id拿到元素

为了让这个会员卡号这几个字和下面的表格对齐&#xff0c;需要改el-form-item的label的长度 如果直接改el-form的label-width,那么所有的el-form-item的label都会改&#xff0c;我不希望这样 我希望只改第1个会员卡号的label长度 给这个el-form-item添加一个id :deep(.el-for…