当前位置: 首页 > news >正文

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

【力扣题】题目描述:

【Python3】代码:

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

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

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

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

class Solution:def findTheDifference(self, s: str, t: str) -> str:from collections import Countertdict, sdict = Counter(t), Counter(s)res = tdict - sdictreturn 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] * 26n = len(s)for i in range(n):alist[ord(s[i]) - ord("a")] += 1alist[ord(t[i]) - ord("a")] -= 1alist[ord(t[-1]) - ord("a")] -= 1res = 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] * 26for x in s:alist[ord(x) - ord("a")] += 1for y in t:alist[ord(y) - ord("a")] -= 1if 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 defaultdictidict = defaultdict(int)n = len(s)for i in range(n):idict[s[i]] += 1idict[t[i]] -= 1 idict[t[-1]] -= 1for 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 defaultdictidict = defaultdict(int)for x in s:idict[x] += 1for y in t:idict[y] -= 1if idict[y] < 0:return y

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

class Solution:def findTheDifference(self, s: str, t: str) -> str:from collections import Counteradict = Counter(s)for x in t:adict[x] -= 1if 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 itertoolsres = 0for 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 reduceres = 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

相关文章:

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

【力扣题】题目描述&#xff1a; 【Python3】代码&#xff1a; 1、解题思路&#xff1a;使用计数器分别统计字符串中的元素和出现次数&#xff0c;两个计数器相减&#xff0c;结果就是新添加的元素。 知识点&#xff1a;collections.Counter(...)&#xff1a;字典子类&#x…...

【从0上手cornerstone3D】如何加载nifti格式的文件

在线演示 支持加载的文件格式 .nii .nii.gz 代码实现 npm install cornerstonejs/nifti-volume-loader// ------------- 核心代码 Start------------------- // 注册一个nifti格式的加载器 volumeLoader.registerVolumeLoader("nifti",cornerstoneNiftiImageVolu…...

c# 学习笔记 - 异步编程

文章目录 1. 异步编程介绍1.1 简单介绍1.2 async/await 使用1.3 Task/Task<TResult> 对象 2. 样例2.1 迅速启动所有任务&#xff0c;仅当需要结果才等待任务执行2.2 使用 await 调用异步方法&#xff0c;即使这个异步方法内有 await 也不会同时执行回调和向下执行操作(必…...

设置了uni.chooseLocation,小程序中打不开

设置了uni.chooseLocation&#xff0c;在小程序打不开&#xff0c;点击没反应&#xff0c;地图显现不出来&#xff1b; 解决方案&#xff1a; 1.Hbuilder——微信开发者工具路径没有配置 打开工具——>设置 2.微信小程序服务端口没有开 解决方法&#xff1a;打开微信开发…...

spring retry 配置及使用

spring retry 配置及使用 接口或功能因外界异常导致失败后进行重推机制 依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.1.RELEASE</version></p…...

uni-app的组件(二)

多项选择器checkbox-group 多项选择器&#xff0c;内部由多个 checkbox 组成。 <checkbox-group><checkbox checked color"red" value"1"></checkbox> 篮球<!-- disabled:是否禁用 --><checkbox disabled color"rgba(0,0…...

项目开发中安全问题以及解决办法——客户传进来的数据不可信

用户传进来的数据是不可信的&#xff0c;比如下面这种情况下&#xff1a; PostMapping("/order") public void wrong(RequestBody Order order) { this.createOrder(order); } Data public class Order { private long itemId; //商品ID private BigDecimal ite…...

解决springboot启动报Failed to start bean ‘subProtocolWebSocketHandler‘;

解决springboot启动报 Failed to start bean subProtocolWebSocketHandler; nested exception is java.lang.IllegalArgumentException: No handlers 问题发现问题解决 问题发现 使用springboot整合websocket&#xff0c;启动时报错&#xff0c;示例代码&#xff1a; EnableW…...

什么是技术架构?架构和框架之间的区别是什么?怎样去做好架构设计?(一)

什么是技术架构?架构和框架之间的区别是什么?怎样去做好架构设计?(一)。 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。在不同的书籍上, 不同的作者, 对于架构的定义也不统一, 角度不同, 定义不同。 一、架构是什么 Linux 有架构,MySQL 有架构,J…...

【多线程】认识Thread类及其常用方法

&#x1f4c4;前言&#xff1a; 本文是对以往多线程学习中 Thread类 的介绍&#xff0c;以及对其中的部分细节问题进行总结。 文章目录 一. 线程的 创建和启动&#x1f346;1. 通过继承 Thread 类创建线程&#x1f345;2. 通过实现 Runnable 接口创建线程&#x1f966;3. 其他方…...

多用户商业版 whisper 2.1在线搭建教程

1. 准备工作 购买许可证&#xff1a;确保你已经购买了足够数量的用户许可证&#xff0c;以便所有员工或客户都能使用软件。系统要求&#xff1a;检查你的服务器和客户端计算机是否满足软件的最低系统要求。网络配置&#xff1a;确保你的网络环境&#xff08;如防火墙、路由器等…...

HEXO搭建个人博客

Hexo是一款基于Node.js的静态博客框架&#xff0c;可以生成静态网页托管在GitHub上。中文文档见HEXO 配置环境 安装Git&#xff1a;下载并安装Git 检查git是否正确安装&#xff1a; git --version 安装Node.js&#xff1a;Node.js 为大多数平台提供了官方的安装程序。注意安装…...

Spring MVC学习之——RequestMapping注解

RequestMapping注解 作用 用于建立请求URL和处理请求方法之间的对应关系。 属性 value&#xff1a;指定请求的实际地址&#xff0c;可以是一个字符串或者一个字符串列表。 value可以不写&#xff0c;直接在括号中写&#xff0c;默认就是value值 RequestMapping(value“/hel…...

鸿蒙原生应用/元服务开发-延迟任务开发实现(二)

一、接口说明 接口名接口描述startWork(work: WorkInfo): void;申请延迟任务stopWork(work: WorkInfo, needCancel?: boolean): void;取消延迟任务getWorkStatus(workId: number, callback: AsyncCallback>): void;获取延迟任务状态&#xff08;Callback形式&#xff09;g…...

机器学习在什么场景下最常用-九五小庞

机器学习在多个场景中都有广泛的应用&#xff0c;下面是一些常见的应用场景&#xff1a; 自然语言处理&#xff08;NLP&#xff09;&#xff1a;如语音识别、自动翻译、情感分析、垃圾邮件过滤等。数据挖掘和分析&#xff1a;如市场分析、用户画像、推荐系统、欺诈检测等。智能…...

利用IP应用场景API识别真实用户

引言 在当今数字化时代&#xff0c;随着互联网的普及和应用的广泛&#xff0c;验证用户身份的重要性变得越来越突出。在许多场景中&#xff0c;特别是在涉及安全性、用户体验以及个人隐私保护方面&#xff0c;确定用户的真实身份至关重要。而IP应用场景API则是一种强大的工具&…...

Hugging Face怎么通过国内镜像去进行模型下载(hf-mirror.com)

一、引言 Hugging Face &#x1f917;是一家专注于自然语言处理&#xff08;NLP&#xff09;技术的公司&#xff0c;以其开源贡献和先进的机器学习模型而闻名。该公司最著名的产品是 Transformers 库&#xff0c;这是一个广泛使用的 Python 库&#xff0c;它提供了大量预训练模…...

POKT Network 开启周期性通缩,该计划将持续至 2025 年

POKT Network&#xff08;也被称为 Pocket Network&#xff09;在通证经济模型上完成了重大的改进&#xff0c;不仅将通货膨胀率降至 5% 以下&#xff0c;并使 POKT 通证在 2025 年走向通缩的轨迹上&#xff0c;预计到2024 年年底通货膨胀率将降至 2% 以下。POKT Network 的 “…...

LRU Cache

文章目录 1. 什么是LRU Cache2. LRU Cache的实现3. LRU Cache的OJ题目分析AC代码 1. 什么是LRU Cache LRU是Least Recently Used的缩写&#xff0c;意思是最近最少使用&#xff0c;它是一种Cache替换算法。 什么是Cache&#xff1f; 狭义的Cache指的是位于CPU和主存间的快速RAM…...

软件测试面试题整理

软件测试的几个阶段 在进行Beta测试之前和之后&#xff0c;通常会进行以下几种测试&#xff1a; 内部测试&#xff08;Internal Testing&#xff09; 在Beta测试之前&#xff0c;开发团队会进行内部测试&#xff0c;对软件进行全面的测试。这个阶段包括单元测试、集成测试和系…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...