当前位置: 首页 > 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算子的计…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...