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

news2024/11/27 22:32:25

【力扣题】题目描述:

【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))

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

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

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

相关文章

Mysql 不同存储引擎数据文件的形式详解

目录 MyISAM MERGE InnoDB Memory Archive CSV BLACKHOLE MySQL 中的每一个数据表在磁盘上至少被表示为一个文件&#xff0c;即存放着该数据表结构定义的 .frm 文件。不同的存储引擎还有其它用来存放数据和索引信息的文件。 从 MySQL 8.0 版本开始&#xff0c;frm 表结构…

Python进行多线程爬取数据通用模板

首先&#xff0c;我们需要导入所需的库&#xff0c;包括requests和BeautifulSoup。requests库用于发送HTTP请求&#xff0c;BeautifulSoup库用于解析HTML文档。 import requests from bs4 import BeautifulSoup然后&#xff0c;我们需要定义一个函数来发送HTTP请求并返回响应。…

日常问题定位-网口不通

发现协商的Advertised link modes没有结果 自动协商不成功&#xff0c;手动协商无报错 可以通了

芯片洁净间的等级是如何划分的

芯片生产是一个非常精细且需要无尘的环境&#xff0c;这种环境通常被称为超净室或洁净室。洁净室是一个专门设计的封闭空间&#xff0c;其中空气中的颗粒物已被高度复杂的过滤系统限制或去除。通常&#xff0c;在大学的实验室中&#xff0c;我们最常接触的是百级间&#xff0c;…

教育照明灯具品牌,专业教育护眼台灯推荐

LED灯作为一种新型的照明产品&#xff0c;具有节能、环保、寿命长等优点&#xff0c;受到越来越多的人们的青睐。但是&#xff0c;市面上的LED灯品牌琳琅满目&#xff0c;让人眼花缭乱。那么&#xff0c;LED灯什么牌子好呢&#xff1f;下面我们来推荐五大品牌。 1.书客护眼台灯…

国内外常见PLC发展现状分析

在聊PLC的市场格局和国产发展现状之前&#xff0c;我们先来简单了解一下PLC的作用。所谓PLC&#xff0c;你可以把它当成是一台小型电脑&#xff0c;只不过这台电脑是专用于工业领域&#xff0c;用来控制各种机械或生产的过程。比如说我们身上穿的衣服&#xff0c;都是由机器缝制…

爱上C语言:操作符详解(上)

&#x1f680; 作者&#xff1a;阿辉不一般 &#x1f680; 你说呢&#xff1a;生活本来沉闷&#xff0c;但跑起来就有风 &#x1f680; 专栏&#xff1a;爱上C语言 &#x1f680;作图工具&#xff1a;draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话&#xff0c;还请…

Ubuntu22.04 下 NFS 相关问题与完整配置(客户机 MacOS)

categories: [Linux-Shell] tags: Linux NFS 写在前面 最近折腾一下 NFS, 先白嫖一顿华子云的 1 个月服务器, 2C4G 感觉不错了, 但NFS 配置起来还是有点难度, 主要还是随机分配的端口配置方面比较恶心. server环境: 华为云 2C4G Ubuntu22.04 client环境: MacOS M1 with brew …

vue3+vite+ts使用Element+Plus

1.安装ElementPlus npm install element-plus --save 2.在index.html中加入 <head><!-- Import style --><link rel"stylesheet" href"//unpkg.com/element-plus/dist/index.css" /><!-- Import Vue 3 --><script src"…

代码随想录算法训练营第四十八天 | LeetCode 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II

代码随想录算法训练营第四十八天 | LeetCode 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II 文章链接&#xff1a;买卖股票的最佳时机 买卖股票的最佳时机 II 视频链接&#xff1a;买卖股票的最佳时机 买卖股票的最佳时机 II 1. LeetCode 121. 买卖股票的最佳时机 1.1…

centos7下安装主从仲裁三台结构的MongoDB 7.0.4

安装手册英文版在这里 https://www.mongodb.com/docs/v7.0/tutorial/install-mongodb-on-red-hat/ 我的安装过程 1&#xff09;基础安装 1、创建 /etc/yum.repos.d/mongodb-org-7.0.repo文件 下面的代码复制到这个文件中&#xff0c;保存 [mongodb-org-7.0] nameMongoDB Re…

RBF、GMM、FUZZY

感觉这三种方法有联系&#xff0c;RBF用多个加权高斯拟合值函数&#xff0c;GMM用多个加权高斯拟合联合分布函数&#xff0c;GMM的加权相比于概率更像FUZZY里的隶属度&#xff0c;并且FUZZY的不同规则实现的就是一定程度的聚类。 一、RBF 资料&#xff1a;https://blog.csdn…

JAVA使用Grafana和Loki抓取聚合日志

Grafana和Loki抓取聚合日志 适用范围配置常见问题参考文章 适用范围 Grafana是日志看板Loki是Grafana的一个插件用于收集日志promtail是Loki配套的抓取工具&#xff0c;放在目标服务器抓取日志 配置 日志服务器安装Grafana&#xff0c;傻瓜式下一步日志服务器启动Loki&#…

CRM系统中的客户保留是什么意思?有多少客户可以留下来?

一家企业&#xff0c;在销售过程中有多少客户是有效的&#xff1f;又有多少客户可以留下来&#xff1f;如果企业只顾着开发新客户&#xff0c;而忽略了客户保留&#xff0c;那么将会造成资源的浪费。那么CRM系统中的客户保留是什么意思&#xff1f; 什么是客户保留&#xff1f…

单调栈【2023年最新】

做题的时候看到了单调栈&#xff0c;但是不知道是个什么玩意&#xff0c;记录一下吧。 单调栈含义 单调栈是一种特殊的数据结构&#xff0c;用于解决一些与单调性相关的问题。它的基本含义是在栈的基础上&#xff0c;维护一个单调递增或单调递减的栈。 在单调递增栈中&#…

caffe搭建squeezenet网络的整套工程

之前用pytorch构建了squeezenet&#xff0c;个人觉得pytorch是最好用的&#xff0c;但是有的工程就是需要caffe结构的&#xff0c;所以本篇也用caffe构建一个squeezenet网络。 数据处理 首先要对数据进行处理&#xff0c;跟pytorch不同&#xff0c;pytorch读取数据只需要给数据…

第六章《凸优化核心过程:真正搞懂梯度下降过程》

优化问题可以分为凸优化问题和非凸优化问题&#xff0c;凸优化问题是指定义在凸集中的凸函数最优化的问题&#xff0c;典型应用场景就是 目标函数极值问题的求解。凸优化问题的局部最优解就是全局最优解&#xff0c;因此 机器学习中很多非凸优化问题都需要被转化为等价凸优化问…

【链接装载与库】动态链接(下)

动态链接 》上篇《 延迟绑定 (PLT) 动态链接的确有很多优势&#xff0c;比静态链接要灵活得多&#xff0c;但它是以牺牲一部分性能为代价的。主要原因是动态链接下对于全局和静态的数据访问都要进行复杂的GOT定位&#xff0c;然后间接寻址&#xff1b;对于模块间的调用也要先…

Go RabbitMQ简介 使用

RabbitMQ简介 RabbitMQ 是一个广泛使用的开源消息队列系统&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准&#xff0c;为分布式应用程序提供了强大的消息传递功能。RabbitMQ 是 Erlang 语言编写的&#xff0c;具有高度的可扩展性和可靠性&#xff0c;…