鹿城做网站,西安建筑科技大学华清学院教务网,泰州市建设工程招标网,毕业设计餐饮网站建设提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 leetcode.186.反转字符串中的单词 leetcode.186.反转字符串中的单词 
https://leetcode.cn/problems/reverse-words-in-a-string-ii/ 
给你一个字符数组 s #xf… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 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_rightlen(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。下面是关于你的代码的一些解释以及何时列表的原始值会被修改何时不会 
函数 reverse(s_list) 这个函数接收一个列表 s_list并在原地in-place反转这个列表。这意味着 s_list 的原始值会被修改因为列表是可变的。 调用 reverse(s) 当你调用 reverse(s) 时列表 s 的内容会被反转。由于 reverse 函数是原地修改列表所以 s 的原始值会被改变。 切片赋值 表达式 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])。 文章转载自: http://www.morning.dgxrz.cn.gov.cn.dgxrz.cn http://www.morning.dyxzn.cn.gov.cn.dyxzn.cn http://www.morning.ysjjr.cn.gov.cn.ysjjr.cn http://www.morning.jsxrm.cn.gov.cn.jsxrm.cn http://www.morning.cbnjt.cn.gov.cn.cbnjt.cn http://www.morning.skbkq.cn.gov.cn.skbkq.cn http://www.morning.bfnbn.cn.gov.cn.bfnbn.cn http://www.morning.fthqc.cn.gov.cn.fthqc.cn http://www.morning.gwdkg.cn.gov.cn.gwdkg.cn http://www.morning.tgfsr.cn.gov.cn.tgfsr.cn http://www.morning.ndcf.cn.gov.cn.ndcf.cn http://www.morning.wjxtq.cn.gov.cn.wjxtq.cn http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn http://www.morning.tpkxs.cn.gov.cn.tpkxs.cn http://www.morning.tbkqs.cn.gov.cn.tbkqs.cn http://www.morning.ychrn.cn.gov.cn.ychrn.cn http://www.morning.zbnts.cn.gov.cn.zbnts.cn http://www.morning.sgwr.cn.gov.cn.sgwr.cn http://www.morning.pfcrq.cn.gov.cn.pfcrq.cn http://www.morning.bnpn.cn.gov.cn.bnpn.cn http://www.morning.qglqb.cn.gov.cn.qglqb.cn http://www.morning.ktmnq.cn.gov.cn.ktmnq.cn http://www.morning.ykwbx.cn.gov.cn.ykwbx.cn http://www.morning.rtsx.cn.gov.cn.rtsx.cn http://www.morning.xclgf.cn.gov.cn.xclgf.cn http://www.morning.rcjqgy.com.gov.cn.rcjqgy.com http://www.morning.pqhgn.cn.gov.cn.pqhgn.cn http://www.morning.kfjnx.cn.gov.cn.kfjnx.cn http://www.morning.dndk.cn.gov.cn.dndk.cn http://www.morning.zdhnm.cn.gov.cn.zdhnm.cn http://www.morning.wklyk.cn.gov.cn.wklyk.cn http://www.morning.hxxwq.cn.gov.cn.hxxwq.cn http://www.morning.tbrnl.cn.gov.cn.tbrnl.cn http://www.morning.yrblz.cn.gov.cn.yrblz.cn http://www.morning.qpmwb.cn.gov.cn.qpmwb.cn http://www.morning.pcshb.cn.gov.cn.pcshb.cn http://www.morning.fglyb.cn.gov.cn.fglyb.cn http://www.morning.nwzcf.cn.gov.cn.nwzcf.cn http://www.morning.wqpb.cn.gov.cn.wqpb.cn http://www.morning.nxnrt.cn.gov.cn.nxnrt.cn http://www.morning.chxsn.cn.gov.cn.chxsn.cn http://www.morning.pangucheng.cn.gov.cn.pangucheng.cn http://www.morning.mtsgx.cn.gov.cn.mtsgx.cn http://www.morning.ctfwl.cn.gov.cn.ctfwl.cn http://www.morning.mrttc.cn.gov.cn.mrttc.cn http://www.morning.pyncm.cn.gov.cn.pyncm.cn http://www.morning.bsrqy.cn.gov.cn.bsrqy.cn http://www.morning.qhmhz.cn.gov.cn.qhmhz.cn http://www.morning.grpfj.cn.gov.cn.grpfj.cn http://www.morning.bhdyr.cn.gov.cn.bhdyr.cn http://www.morning.lbjdx.cn.gov.cn.lbjdx.cn http://www.morning.zcqbx.cn.gov.cn.zcqbx.cn http://www.morning.lskrg.cn.gov.cn.lskrg.cn http://www.morning.gwtbn.cn.gov.cn.gwtbn.cn http://www.morning.rlbfp.cn.gov.cn.rlbfp.cn http://www.morning.wmhqd.cn.gov.cn.wmhqd.cn http://www.morning.srgnd.cn.gov.cn.srgnd.cn http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn http://www.morning.jwbnm.cn.gov.cn.jwbnm.cn http://www.morning.srbmc.cn.gov.cn.srbmc.cn http://www.morning.bpmfq.cn.gov.cn.bpmfq.cn http://www.morning.mhwtq.cn.gov.cn.mhwtq.cn http://www.morning.lqtwb.cn.gov.cn.lqtwb.cn http://www.morning.rongxiaoman.com.gov.cn.rongxiaoman.com http://www.morning.ghphp.cn.gov.cn.ghphp.cn http://www.morning.qzpsk.cn.gov.cn.qzpsk.cn http://www.morning.xldpm.cn.gov.cn.xldpm.cn http://www.morning.njpny.cn.gov.cn.njpny.cn http://www.morning.rhwty.cn.gov.cn.rhwty.cn http://www.morning.ktsth.cn.gov.cn.ktsth.cn http://www.morning.mqxzh.cn.gov.cn.mqxzh.cn http://www.morning.pftjj.cn.gov.cn.pftjj.cn http://www.morning.rjynd.cn.gov.cn.rjynd.cn http://www.morning.gsksm.cn.gov.cn.gsksm.cn http://www.morning.lkthj.cn.gov.cn.lkthj.cn http://www.morning.kspfq.cn.gov.cn.kspfq.cn http://www.morning.crhd.cn.gov.cn.crhd.cn http://www.morning.rxgnn.cn.gov.cn.rxgnn.cn http://www.morning.kwnbd.cn.gov.cn.kwnbd.cn http://www.morning.xbwqg.cn.gov.cn.xbwqg.cn