【Python3】【力扣题】389. 找不同

news2024/11/30 15:39:05

【力扣题】题目描述:

【Python3】代码:

1、解题思路:使用计数器分别统计字符串中的元素和出现次数,两个计数器相减,结果就是新添加的元素。

知识点:collections.Counter(...):字典子类,计数器,统计各元素及出现次数。

              list(...):转为列表。

              列表[索引]:获取列表中索引号对应的元素。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        from collections import Counter
        tdict, sdict = Counter(t), Counter(s)
        res = tdict - sdict
        return list(res)[0]

2、解题思路:分别将两个字符串转为列表并排序,依次比对元素是否相同,不同则t中的该元素为新添加的元素。

知识点:列表.sort():在原列表的基础上将元素按从小到大排序,不生成新列表。

              列表[-1]:获取列表中最后一个元素。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        n = len(s)
        slist, tlist = list(s), list(t)
        slist.sort()
        tlist.sort()
        for i in range(n):
            if tlist[i] != slist[i]:
                return tlist[i]
        return tlist[-1]

3、(1)解题思路:使用一个长度为26的列表,依次记录26个字母在两个字符串中出现次数。字符串s中字母增加列表中对应计数,字符串t中字母减少列表中对应计数。最终计数为-1的为t中新添加的元素。

知识点:len(...):获取序列的长度,即有多少个元素。

              ord(...):将字符转为ASCII或Unicode数值。

              列表.index(...):获取某元素在列表中的索引号。

              chr(...):将ASCII或Unicode数值转为字符串。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        alist = [0] * 26
        n = len(s)
        for i in range(n):
            alist[ord(s[i]) - ord("a")] += 1
            alist[ord(t[i]) - ord("a")] -= 1
        alist[ord(t[-1]) - ord("a")] -= 1
        res = alist.index(-1) + ord("a")
        return chr(res)

也可先统计字符串s中各字母的个数,再遍历字符串t,字符串t中字母减少列表中对应计数,一旦计数小于0即为t中新添加的元素。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        alist = [0] * 26
        for x in s:
            alist[ord(x) - ord("a")] += 1
        for y in t:
            alist[ord(y) - ord("a")] -= 1
            if alist[ord(y) - ord("a")] < 0:
                return y

(2)解题思路:使用一个字典记录各元素及其个数,字符串s中字母增加字典中对应的值,字符串t中字母减少字典中对应的值。最终值为-1的为t中新添加的元素。

知识点:collections.defaultdict(...):字典子类,参数为工厂函数,若某键不存在,则调用工厂函数返回默认值。例如:collections.defaultdict(int),若某键不存在,则值默认为0。

              字典[键]:获取字典中某键对应的值,或修改键对应的值:字典[键]=值。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        from collections import defaultdict
        idict = defaultdict(int)
        n = len(s)
        for i in range(n):
            idict[s[i]] += 1
            idict[t[i]] -= 1 
        idict[t[-1]] -= 1
        for x in idict:
            if idict[x] == -1:
                return x

也可先统计字符串s中各字母的个数,再遍历字符串t,字符串t中字母减少字典中对应的值,一旦计数小于0即为t中新添加的元素。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        from collections import defaultdict
        idict = defaultdict(int)
        for x in s:
            idict[x] += 1
        for y in t:
            idict[y] -= 1
            if idict[y] < 0:
                return y

也可使用计数器直接获得字符串s中字母及其个数,再遍历字符串t,字符串t中字母减少计数器中对应的值,一旦计数小于0即为t中新添加的元素。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        from collections import Counter
        adict = Counter(s)
        for x in t:
            adict[x] -= 1
            if adict[x] < 0:
                return x

4、解题思路:分别获取两个字符串中元素的ASCII或Unicode数值的和,再相减,即为新添加的元素。

知识点:sum(...):求和。

              ord(...):将字符转为ASCII或Unicode数值。

              chr(...):将ASCII或Unicode数值转为字符串。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        ssum = sum(ord(x) for x in s)
        tsum = sum(ord(y) for y in t)
        return chr(tsum - ssum)

 也可以依次按照字符串中对应位置(相同索引号),加上字符串t中字母的ASCII或Unicode数值,并减去字符串s中字母的ASCII或Unicode数值,最终的数值即为新添加的元素对应的数值。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        res = ord(t[-1])
        n = len(s)
        for i in range(n):
            res += ord(t[i]) - ord(s[i])
        return chr(res)

5、(1)解题思路:将两个字符串拼接起来,依次将字母转为ASCII或Unicode数值,再进行位运算。

知识点:字符串+字符串:将两个字符串拼接成1个字符串。

              a ^ b: a与b进行异或运算(相同为0,不同为1)。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        for x in s+t:
            res ^= ord(x)
        return chr(res)

也可以两个字符串拼接返回迭代器,再依次进行位运算。

知识点:itertools.chain(可迭代对象1, 可迭代对象2, ...):返回一个迭代器,包含所有可迭代对象的内容。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        import itertools
        res = 0
        for x in itertools.chain(s,t):
            res ^= ord(x)
        return chr(res)

可进一步使用Python内置函数完成。

知识点:map(函数可迭代对象):对可迭代对象中元素进行映射,返回一个迭代器。

              functools.reduce(函数可迭代对象):函数带有两个参数。对可迭代对象中元素依次进行累积操作,获得一个计算结果。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        from functools import reduce
        res = reduce(lambda x,y:x^y,map(ord,s+t))
        return chr(res)

6、解题思路:遍历字符串s,将字符串s中的字母依次从字符串t中去除,剩余的即为新添加的元素。

知识点:字符串.replace(旧值, 新值, 替换最大次数):字符串中某字符替换成新的字符。字符串为不可变类型,若要获得替换后的字符串需赋值。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        n = len(s)
        for i in range(n):
            t = t.replace(s[i],"",1)
        return t

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

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

相关文章

leetcode—矩阵

1 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 方法一&#xf…

vue3.2二次封装antd vue 中的Table组件,原有参数属性不变

vue3.2中的<script setup>语法 在项目中多处使用到表格组件,所以进行了一个基础的封装,主要是通过antd vue 中表格的slots配置项,通过配合插槽来进行封装自定义表格; 这次主要的一个功能是编辑之后变成input框 修改了之后变成完成发送请求重新渲染表格&#xff1a; 子…

【实战】Jmeter连接mongoDB数据库

作为一名测试人员&#xff0c;做接口测试难免要进行基础数据校验。Jmeter本身对mysql支持的非常好&#xff0c;但是对mongoDB、cassandra等数据库要怎么连接并校验数据呢&#xff1f;本文以mongodb为例进行说明。 一、如果你有Java基础&#xff0c;可以编写java代码访问mongo …

使用numpy创建数组

目录 一&#xff1a;使用numpy.array() 二&#xff1a;使用np.zeros() 三&#xff1a;np.full() 四&#xff1a;numpy.ones() 在Python的NumPy库中&#xff0c;有几种不同的方法可以创建数组。我们演示下不同方式创建数组的例子 一&#xff1a;使用numpy.array() np.array…

python 用bisect来管理已排序的序列

已排序的序列可以用来进行快速搜索&#xff0c;而标准库的 bisect 模块给我们提供了二分查找算法。bisect.insort 让已排序的序列保持有序 bisect 模块包含两个主要函数&#xff0c;bisect 和 insort&#xff0c;两个函数都利用二分查找算法来在有序序列中查找或插入元素。 用…

133基于matlab的智能微电网粒子群优化算法

基于matlab的智能微电网粒子群优化算法&#xff0c;输出微型燃气轮机、电网输入微网运行计划、储能运行计算。程序已调通&#xff0c;可直接运行。 133智能微电网粒子群优化算法 (xiaohongshu.com)

P9842 [ICPC2021 Nanjing R] Klee in Solitary Confinement 题解(SPJ!!!)

[ICPC2021 Nanjing R] Klee in Solitary Confinement 题面翻译 给定 n , k n,k n,k 和一个长为 n n n 的序列&#xff0c;你可以选择对区间 [ l , r ] [l, r] [l,r] 的数整体加上 k k k&#xff0c;也可以不加。最大化众数出现次数并输出。 题目描述 Since the travele…

Kali Linux保姆级教程|零基础从入门到精通,看完这一篇就够了!(附工具包)

作为一名从事网络安全的技术人员&#xff0c;不懂Kali Linux的话&#xff0c;连脚本小子都算不上。 Kali Linux预装了数百种享誉盛名的渗透工具&#xff0c;使你可以更轻松地测试、破解以及进行与数字取证相关的任何其他工作。 今天给大家分享一套Kali Linux资料合集&#xf…

Angular系列教程之变更检测与性能优化

文章目录 前言变更检测的原理脏检查OnPush策略 示例代码总结 前言 Angular 除了默认的变化检测机制&#xff0c;也提供了ChangeDetectionStrategy.OnPush&#xff0c;用 OnPush 可以跳过某个组件或者某个父组件以及它下面所有子组件的变化检测。 在本文中&#xff0c;我们将探…

最常见的十道面试题-反射与集合

面试题一&#xff1a;Java是值传递还是引用传递&#xff1f; Java是值传递。这意味着当将一个变量传给一个方法的时候&#xff0c;我们实际上是传递的是这个变量的的副本。 但是对于对象来说&#xff0c;我们传递的是其的副本&#xff0c;我们不可以改变对象的引用本身&#…

基于Java SSM框架实现智能停车场管理系统项目【项目源码+论文说明】

基于java的SSM框架实现智能停车场管理系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个智能停车场管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将…

Maven工程 — 继承与聚合 相关知识点详解

简介&#xff1a;这篇帖子主要讲解Maven工程中的继承与聚合的相关知识点&#xff0c;用简洁的语言和小编自己的理解&#xff0c;深入浅出的说明Maven工程的继承与聚合。 目录 1、继承 1.1 继承关系的实现 1.2 版本锁定 2、聚合 2.1 聚合方法 3、总结 1、继承 图 1-1 继承…

CORS漏洞学习

CORS漏洞属于一个协议漏洞&#xff0c;具体是由于同源策略的设置问题触发的漏洞&#xff0c;漏洞利用条件较为苛刻&#xff0c;但实战中也常见。 首先要了解同源策略 什么是同源策略&#xff1f; 同源策略是一种Web浏览器安全机制&#xff0c;旨在防止网站相互攻击。 同源策…

Angular系列教程之路由守卫

文章目录 前言路由守卫的类型CanLoadCanActivateCanActivateChildCanDeactivateResolve总结 前言 在Angular中&#xff0c;路由守卫是一个非常有用的功能&#xff0c;可以帮助我们控制用户在导航过程中的权限和访问限制。通过使用路由守卫&#xff0c;我们可以拦截导航并根据需…

使用@Slf4j后引入log,idea标红

引入Slf4j注解 idea标红Cannot resolve symbol ‘log’ 引入Lombok插件 如果在Marketplace查不到时&#xff0c;不妨关闭菜单再打开试下

STM32+HAL库驱动ADXL345传感器(SPI协议)

STM32HAL库驱动ADXL345传感器&#xff08;SPI协议&#xff09; ADXL345传感器简介实物STM32CubeMX配置SPI配置片选引脚配置串口配置 特别注意&#xff08;重点部分&#xff09;核心代码效果展示 ADXL345传感器简介 ADXL345 是 ADI 公司推出的基于 iMEMS 技术的 3 轴、数字输出加…

利用HTML和CSS实现的浮动布局

代码如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>*{m…

0基础学java-day27(正则表达式)

一、正则快速入门 1 为什么要学习正则表达式 package com.hspedu.regexp;import java.util.regex.Matcher; import java.util.regex.Pattern;/*** author 林然* version 1.0* 体验正则表达式的威力&#xff0c;给我们文本处理带来哪些好处*/ public class Regexp_ {public sta…

Spark与HBase的集成与数据访问

Apache Spark和Apache HBase分别是大数据处理和分布式NoSQL数据库领域的两个重要工具。在本文中&#xff0c;将深入探讨如何在Spark中集成HBase&#xff0c;并演示如何通过Spark访问和操作HBase中的数据。将提供丰富的示例代码&#xff0c;以便更好地理解这一集成过程。 Spark…