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

【力扣题】题目描述:

【Python3】代码:

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

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

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

class Solution:def isAnagram(self, s: str, t: str) -> bool:# 耗时长if len(s) != len(t): return Falsefor x in s:if s.count(x) != t.count(x): return Falsereturn 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 Falseres = [0] * 26for x in s:res[ord(x) - ord('a')] += 1for y in t:res[ord(y) - ord('a')] -= 1if (res[ord(y) - ord('a')]) < 0: return Falsereturn True

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

① 一个列表。

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

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

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

② 一个字典。

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

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

class Solution:def isAnagram(self, s: str, t: str) -> bool:from collections import defaultdictif len(s) != len(t): return Falseres = defaultdict(int)for x,y in zip(s,t):res[x] += 1res[y] -= 1if len(set(res.values())) != 1: return Falsereturn 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 Falseres1, res2 = [0] * 26, [0] * 26for x,y in zip(s,t):res1[ord(x) - ord('a')] += 1res2[ord(y) - ord('a')] += 1return res1 == res2

② 两个字典。

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

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

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

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

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

class Solution:def isAnagram(self, s: str, t: str) -> bool:from collections import Counterif len(s) != len(t): return Falsereturn 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 Falsereturn sorted(s) == sorted(t)# 或者from operator import eqif len(s) != len(t): return Falsereturn eq(sorted(s),sorted(t))

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

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

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

相关文章

【uniapp】通用列表封装组件

uniapp页面一般都会有像以下的列表页面&#xff0c;封装通用组件&#xff0c;提高开发效率&#xff1b; &#xff08;基于uView前端框架&#xff09; 首先&#xff0c;通过设计图来分析一下页面展示和数据结构定义 w-table组件参数说明 参数说明类型可选值默认值toggle列表是…

关于Android Studio中开发Flutter配置

配置系统环境变量&#xff1a;path下 &#xff0c;flutter的bin目录下 File->Settings->Languages&Frameworks->FlutterFile->Settings->Languages&Frameworks->DartFile->Settings->Languages&Frameworks->Android SDK 确认是…

单链表(增删改查)【超详细】

目录 单链表 1.单链表的存储定义 2.结点的创建 3.链表尾插入结点 4.单链表尾删结点 5.单链表头插入结点 6.单链表头删结点 7.查找元素&#xff0c;返回结点 8.在pos结点前插入一个结点 ​编辑 9.在pos结点后插入一个结点 10.删除结点 11.删除pos后面的结点 12.修改…

flink1.18.0 sql-client报错

报错 Flink SQL> > > select * from t1; [ERROR] Could not execute SQL statement. Reason: java.lang.ClassNotFoundException: org.apache.kafka.clients.consumer.OffsetResetStrategy 解决 注意 一定要重启flink服务 否则还会报错: Flink SQL> select *…

CDN是什么?

一.CDN的概念 内容分发网络&#xff08;Content Delivery Network&#xff0c;简称CDN&#xff09;是建立并覆盖在承载网之上&#xff0c;由分布在不同区域的边缘节点服务器群组成的分布式网络。CDN应用广泛&#xff0c;支持多种行业、多种场景内容加速&#xff0c;例如&#…

拆分代码 + 动态加载 + 预加载,减少首屏资源,提升首屏性能及应用体验

github 原文地址 我们看一些针对《如何提升应用首屏加载体验》的文章&#xff0c;提到的必不可少的措施&#xff0c;便是减少首屏幕加载资源的大小&#xff0c;而减少资源大小必然会想到按需加载措施。本文提到的便是一个基于webpack 插件与 react 组件实现的一套研发高度自定…

【算法与数据结构】39、LeetCode组合总和

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;这道题当中数字可以多次使用&#xff0c;那么我们在递归语句当中不能直接找下一个candidate的元素&…

Android Studio导入,删除第三方库

Android项目经常用到无私的程序员们提供的第三方类库。本篇博客就是实现第三方库的导入和删除。 一、导入第三方库 1、将需要的库下载到本地&#xff1b; 2、新建Moudle (1)File --- New Moudle (2)选择Android Library --- Next (3)填写Moudle名 --- Finish。一个新的Mou…

[RCTF 2019]nextphp

文章目录 考点前置知识PHP RFC&#xff1a;预加载FFI基本用法PHP RFC&#xff1a;新的自定义对象序列化机制 解题过程 考点 PHP伪协议、反序列化、FFI 前置知识 PHP RFC&#xff1a;预加载 官方文档 通过查看该文档&#xff0c;在最下面找到预加载结合FFI的危害 FFI基本用法 …

ElementUI的Dialog弹窗实现拖拽移动功能

实现ElementUI的Dialog弹窗可以拖拽移动 实现步骤&#xff1a; 1.创建自定义指令 在utils文件夹下新建文件夹 utils/directive/el-dragDialog/index.js import drag from ./dragconst install function(Vue) {Vue.directive(el-drag-dialog, drag) }if (window.Vue) {windo…

基于自然语言处理的结构化数据库问答机器人系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 知识库&#xff0c;就是人们总结出的一些历史知识的集合&#xff0c;存储、索引以后&#xff0c;可以被方便的检索出来供后人查询/学习。QnA Maker是用于建立知识库的工具&#xff0c;使用…

企业组建客服中心,需要考虑哪些问题?

随着市场竞争的加剧&#xff0c;企业越来越注重客户服务。因此&#xff0c;组建一个专业的客服中心已成为企业的一个重要战略举措。然而&#xff0c;这个任务不仅需要考虑技术和人员方面的问题&#xff0c;还需要考虑许多其他的因素。在本文中&#xff0c;我们将探讨企业在组建…

【java】【MyBatisPlus】【四】【完】MyBatisPlus一些实战总结(枚举、翻页、sql、组合条件、自增主键、逻辑删除)

目录 一、枚举 1、数据库type字段是Integer 类型枚举 2、创建一个该字段的枚举类 TypeEnum 3、修改实体类 4、配置文件新增mybatis-plus的配置 5、检验&#xff1a; 5.1 查询显示 5.3 库里验证 二、自增主键不是id字段处理 三、逻辑删除字段不是delete字段处理 1、实…

CTFHUB-WEB-SQL注入

sql学的太不好了&#xff0c;回炉重造 判断 Sql 注入漏洞的类型&#xff1a; 1.数字型 当输入的参 x 为整型时&#xff0c;通常 abc.php 中 Sql 语句类型大致如下&#xff1a;select * from <表名> where id x这种类型可以使用经典的 and 11 和 and 12 来判断&#xff…

SQL优化之MySQL执行计划(Explain)及索引失效详解

1、执行计划基础 1.1、执行计划&#xff08;Explain&#xff09;定义 在 MySQL 中可以通过 explain 关键字模拟优化器执行 SQL语句&#xff0c;从而解析MySQL 是如何处理 SQL 语句的。 1.2、MySQL查询过程 客户端向 MySQL 服务器发送一条查询请求服务器首先检查查询缓存&am…

【Unity】简单案例脚本实现 | 鼠标观察/键盘控制移动飞行/行走/碰撞检测

《Unity5实战-使用C#和Unity开发多平台游戏》第二章-构建一个让你置身3D空间的演示 鼠标观察/键盘控制移动飞行/行走/碰撞检测 Unity版本&#xff1a;2019.4.23f1c1 注意脚本名称和组件添加&#xff0c;不在文章中一一强调场景模型都是在资源商店选择的免费下载&#xff08;选…

windows下nvm的安装和使用

1、nvm简介 nvm是一个nodejs的版本管理工具&#xff0c;它可以在同一台机器上安装和切换不同版本的node的工具。常用在一台机器不同项目需要不同的node环境时&#xff0c;对node版本的自由切换使用。 2、nvm下载安装 2.1 下载 地址&#xff1a; https://github.com/coreybu…

设计模式——建造者模式

目录 建造者模式盖房项目需求基本介绍四个角色实例代码注意事项和细节抽象工厂模式 VS 建造者模式 建造者模式 盖房项目需求 传统方式&#xff1a;打地基&#xff0c;砌墙&#xff0c;封顶 盖房子步骤 public abstract class AbstractHouse {// 地基public abstract void b…

【GUI软件开发】小红书评论采集:自动采集1w多条,含二级评论!

文章目录 一、爬取目标1.1 效果截图1.2 演示视频1.3 软件说明 二、代码讲解2.1 爬虫采集模块2.2 软件界面模块2.3 日志模块 三、附完整源码及软件 一、爬取目标 您好&#xff01;我是马哥python说 &#xff0c;一名10年程序猿。 我用python开发了一个爬虫采集软件&#xff0c…

【优选算法系列】【专题二滑动窗口】第二节.1004. 最大连续1的个数 III和1658. 将 x 减到 0 的最小操作数

文章目录 前言一、最大连续1的个数 III 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写二、将 x 减到 0 的最小操作数 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写总结 前言 一、最大连…