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

吃肉的刷题记录4-基础知识-字符串

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • leetcode.186.反转字符串中的单词


leetcode.186.反转字符串中的单词

https://leetcode.cn/problems/reverse-words-in-a-string-ii/

给你一个字符数组 s ,反转其中 单词 的顺序。

单词 的定义为:单词是一个由非空格字符组成的序列。s 中的单词将会由单个空格分隔。

必须设计并实现 原地 解法来解决此问题,即不分配额外的空间。

示例 1:

输入:s = [“t”,“h”,“e”," “,“s”,“k”,“y”,” “,“i”,“s”,” “,“b”,“l”,“u”,“e”]
输出:[“b”,“l”,“u”,“e”,” “,“i”,“s”,” “,“s”,“k”,“y”,” ",“t”,“h”,“e”]

思路:
先把全体字符全部反转,然后找到每个空格之间的单词,反转每个单词

class Solution:def reverseWords(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""def reverse(s_list):if len(s_list)==1:return s_listleft = 0right = len(s_list)-1while left < right:s_list[left], s_list[right] = s_list[right], s_list[left]left += 1right -= 1return s_listreverse(s)if len(s) == 1:return sex_left = 0ex_right = 1while ex_right<len(s):if s[ex_right] != " " :ex_right += 1else:s[ex_left:ex_right] =  reverse(s[ex_left:ex_right])ex_left = ex_right + 1ex_right += 1s[ex_left:ex_right] =  reverse(s[ex_left:ex_right])

在Python中,字符串是不可变(immutable)的,这意味着一旦一个字符串被创建,你不能改变这个字符串的内容。但是,列表(list)是可变的(mutable),这意味着你可以改变列表中的元素。
在你提供的代码中,你正在处理一个字符串列表 s。下面是关于你的代码的一些解释,以及何时列表的原始值会被修改,何时不会:

  1. 函数 reverse(s_list)
    • 这个函数接收一个列表 s_list,并在原地(in-place)反转这个列表。这意味着 s_list 的原始值会被修改,因为列表是可变的。
  2. 调用 reverse(s)
    • 当你调用 reverse(s) 时,列表 s 的内容会被反转。由于 reverse 函数是原地修改列表,所以 s 的原始值会被改变。
  3. 切片赋值
    • 表达式 s[ex_left:ex_right] = reverse(s[ex_left:ex_right]) 是将 s 列表中的一个切片替换为另一个反转后的切片。这同样会修改原始列表 s
      总的来说,由于列表是可变的,任何对列表的修改(如元素赋值、切片赋值、方法调用如 list.append()list.extend() 等)都会改变原始列表。
      需要注意的是,虽然列表本身是可变的,但如果你在列表中存储的是字符串,那么这些字符串本身是不可变的。例如,如果你尝试 s[0][0] = 'a',这将会引发错误,因为你不能修改字符串的某个字符。但你可以通过赋值来替换整个字符串,例如 s[0] = 'another_string',这将修改列表 s 的第一个元素。
      最后,代码中的注释 # Do not return anything, modify s in-place instead. 表明这个函数的目的是修改传入的列表 s,而不是返回一个新的列表。根据你的代码逻辑,原始的列表 s 会被就地修改。

第26行修改成这样就会失败:
reverse(s[ex_left:ex_right])
这是为什么?

当你调用 reverse(s[ex_left:ex_right]) 而不是使用切片赋值,你确实调用了 reverse 函数,该函数会原地修改传入的列表。然而,s[ex_left:ex_right] 是一个列表的切片,它创建了一个新的列表(这个新列表是原始列表 s 的一个子集的浅拷贝),然后你将这个新列表传递给了 reverse 函数。
以下是为什么这样做不会修改原始列表 s 的原因:

  • 列表的切片操作返回一个新的列表,即使原始列表是可变的。
  • 当你将这个切片传递给 reverse 函数时,实际上你是在反转这个新列表,而不是原始列表 s
  • 由于新列表与原始列表 s 是独立的,所以对新列表的修改不会影响原始列表。
    为了修改原始列表 s,你需要使用切片赋值,像这样:
s[ex_left:ex_right] = reverse(s[ex_left:ex_right])

这个表达式将反转后的新列表(reverse(s[ex_left:ex_right]) 的结果)赋值给原始列表 s 的相应切片位置,从而修改了原始列表 s
所以,为了达到你的目的,你应该保留原来的切片赋值方式,而不是仅仅调用 reverse(s[ex_left:ex_right])

相关文章:

吃肉的刷题记录4-基础知识-字符串

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 leetcode.186.反转字符串中的单词 leetcode.186.反转字符串中的单词 https://leetcode.cn/problems/reverse-words-in-a-string-ii/ 给你一个字符数组 s &#xf…...

人工智能与机器学习原理精解【7】

文章目录 凸优化基础理论加权正规方程线性回归模型加权最小二乘法加权正规方程注意使用Diagonal函数使用diagm函数总结 加权最小二乘法加权最小二乘法的定义加权最小二乘法的算法加权最小二乘法的计算加权最小二乘法的原理一、基本思想二、原理详解三、总结 加权最小二乘法的例…...

ResNet学习笔记

《Deep Residual Learning for Image Recongition》&#xff1a;用于图像分类的深度残差学习。 ResNet&#xff08;残差网络&#xff09;是在2015年由微软研究院的Kaiming He等人提出的&#xff0c;旨在解决深度神经网络训练过程中的梯度消失、梯度爆炸问题&#xff0c;并允许…...

使用chainlit快速构建类似OPEN AI一样的对话网页

快速开始 创建一个文件&#xff0c;例如“chainlit_chat” mkdir chainlit_chat进入 chainlit_chat文件夹下&#xff0c;执行命令创建python 虚拟环境空间(需要提前安装好python sdk。 Chainlit 需要python>3.8。,具体操作&#xff0c;由于文章长度问题就不在叙述&#xf…...

【根据字符出现频率排序】python刷题记录

R2-字符串算法 包哈希表的呀。 注意 class Solution:def frequencySort(self, s: str) -> str:dictdefaultdict(list)#字符串不能直接排序&#xff0c;需要转换为列表["a","b","c"]slist(s)for str in s:if not dict[str]:dict[str]1else:…...

活动报名小程序

#活动报名工具# # 活动报名小程序 ## 项目简介 一款通用的活动报名工具&#xff0c;包含活动展示&#xff0c;微信支付&#xff0c;订单管理&#xff0c;分享评价等功能。 品客聚精彩&#xff0c;有你才精彩&#xff01;不只有线下活动还可以进行线上裂变活动。 …...

unity基础问题

1.一个列表中的UI有放大效果&#xff0c;用什么实现&#xff1f; 缩放&#xff0c;Layout组件可以勾选使用子级缩放&#xff0c;这样缩放之后也能保持间距 2.UGUI事件传递机制的冒泡机制是怎样的 事件系统从内向外遍历UI层次结构&#xff0c;通知父级UI元素有关该事件的信息。类…...

RedHat Enterprise Linux 7 YUM源(本地/网络源)配置详解

目录 一、挂载 二、建立本地源 三、建立网络源 四、验证可行性 一、挂载 ——将光盘挂载到 /mnt 下 当/mnt中有如图内容时&#xff0c;即挂载成功 若挂载光驱/dev/sr0时报错&#xff1a;mount: no medium found on /dev/sr0 解决措施&#xff1a;查看该设备状态是否全部勾选…...

关于顺序表数组下标的一些关系梳理

...

VS C++ Project(项目)的工作目录设置

如果只是简单创建一个VS CProject或者MFC Project&#xff0c;可能很多时候&#xff0c;只关心将Project放在硬盘的那个位置&#xff0c;与Project目录相关的的其他问题&#xff0c;并不引人注意&#xff0c;我们也不是十分在意。有时我们不得不进行工作目录方面的设置&#xf…...

STM32自定义协议串口接收解析指令程序

1、在使用串口接收自定义协议指令时&#xff0c;需要串口解析收到的是什么指令&#xff0c;举例通信报文为 上位机->单片机 名称 长度 备注 帧头 1Byte 0x5A 0x5A 帧长度 1Byte 数据包的长度0x00-0xFF 数据包 命令字 1Byte 功能标识 数据 可以为空 校验 …...

STM32——GPIO(点亮LEDLED闪烁)

一、什么是GPIO&#xff1f; GPIO&#xff08;通用输入输出接口&#xff09;&#xff1a; 1.GPIO 功能概述 GPIO 是通用输入/输出&#xff08;General Purpose I/O&#xff09;的简称&#xff0c;既能当输入口使用&#xff0c;又能当输出口使用。端口&#xff0c;就是元器件…...

VulnHub靶机入门篇--kioptrix.level 3

1.环境准备 靶机&#xff1a;Kioptrix Level 3&#xff08;Nat模式&#xff09; 下载地址&#xff1a;https://download.vulnhub.com/kioptrix/KVM3.rar 攻击机&#xff1a;kali&#xff08;192.168.26.128&#xff09;&#xff08;Nat模式&#xff09; 2.渗透测试 信息收…...

aiGPT系统源码★重大升级★AI写作/AI绘画/AI音乐/AI视频

亲爱老铁们好&#xff0c;又一段时间未更新内容了&#xff0c;我依然是爱你们的神点妹&#xff0c;今天点妹给大家带来一波新的福利&#xff1a;咱们用的aiGPT经过攻城师们近半年来夜以继日的技术升级&#xff0c;今天终于迎来了新版上线首秀。此次升级内容包含&#xff1a;首先…...

Vue Router高级用法:动态路由与导航守卫

Vue Router是Vue.js官方的路由管理器&#xff0c;它和Vue.js的核心深度集成&#xff0c;让构建单页应用变得轻而易举。 动态路由 动态路由允许你在路由路径中使用变量&#xff0c;这些变量可以从实际的URL中获取&#xff0c;并传递给对应的路由组件。 定义动态路由 在route…...

江科大/江协科技 STM32学习笔记P9-11

文章目录 OLED1、OLED硬件main.c EXTI外部中断1、中断系统2、中断执行流程图3、STM32中断4、中断地址的作用5、EXTI6、EXTI基本结构7、AFIO复用IO口8、EXTI框图或门和与门 9、旋转编码器介绍10、硬件电路 OLED 1、OLED硬件 SCL和SDA是I2C的通信引脚&#xff0c;需要接在单片机…...

【培训通知】成为Power BI数据分析可视化实战第一人,加入3天直播即可

Power BI数据分析可视化实战课程培训是一门旨在提升学员在数据分析与可视化领域能力的专业课程。以下是对该培训课程的详细介绍&#xff1a; 一、课程概述 Power BI 是一种业务分析服务&#xff0c;能够提供深入的见解&#xff0c;帮助用户实现快速、明智的决策。该课程通过实…...

24暑假算法刷题 | Day22 | LeetCode 77. 组合,216. 组合总和 III,17. 电话号码的字母组合

目录 77. 组合题目描述题解 216. 组合总和 III题目描述题解 17. 电话号码的字母组合题目描述题解 77. 组合 点此跳转题目链接 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输…...

一篇文章告诉你对讲机为什么不能被手机取代的7个原因

在智能时代&#xff0c;手机几乎无处不在&#xff0c;涵盖了从基本通信到多媒体娱乐的一切功能。然而&#xff0c;即使在这种情况下&#xff0c;对讲机仍然没有被完全取代。这不仅仅是出于怀旧或专业需求&#xff0c;还有许多实质性的原因使得对讲机在特定领域和情况下仍然保持…...

LION论文阅读

一、论文主要出发点 3D目标检测的性能受限于3D卷积的局部感受野。 Transformer在3D检测领域效果很好&#xff0c;但由于算力限制&#xff0c;已有的工作在pillar内&#xff0c;或将voxel分组在组内进行特征交互&#xff0c;阻碍了他们捕捉更远程的依赖关系。 线性RNN算子的计…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...