目录
344. 反转字符串
双指针
库函数
541. 反转字符串 II
剑指 Offer 05. 替换空格
暴力解法
双指针
151. 反转字符串中的单词
用库函数
代码随想录 (programmercarl.com)
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
n = len(s)
left = 0
right = n-1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
s[:]=s[::-1]
代码随想录 (programmercarl.com)
class Solution:
def reverseStr(self, s: str, k: int) -> str:
res = list(s)
for i in range(0, len(res), 2*k):
res[i: i+k] = reversed(res[i: i+k]) # 左闭右开 不包含i+k
return "".join(res)
class Solution:
def replaceSpace(self, s: str) -> str:
s = list(s)
res = []
for i in s:
if i == ' ':
res.append("%20")
else:
res.append(i)
return ''.join(res)
class Solution:
def replaceSpace(self, s: str) -> str:
count = s.count(' ')
res = list(s)
# 每碰到一个空格就多拓展两个格子,1 + 2 = 3个位置存’%20‘
res.extend([' '] * count * 2)
# left指向原字符串尾部元素,right指向新字符串尾部元素
left, right =len(s) - 1, len(res) - 1
while left < right:
if s[left] != ' ':
res[right] = res[left]
right -= 1
else:
res[right-2: right+1] = '%20'
right -= 3
left -= 1
return ''.join(res)
数组扩展上不太理解
代码随想录 (programmercarl.com)
class Solution:
def reverseWords(self, s: str) -> str:
return' '.join(s.strip().split()[::-1])
class Solution:
def reverseWords(self, s: str) -> str:
s = s.strip() # 删除首尾空格
strs = s.split() # 分割字符串
strs.reverse() # 翻转单词列表
return ' '.join(strs) # 拼接为字符串并返回
class Solution:
def reverseWords(self, s: str) -> str:
s = s.strip()
s = list(s)
res = []
i = j = len(s) - 1
while i >= 0:
while i >= 0 and s[i] != ' ':
i -= 1
res.append(''.join(s[i+1: j+1]))
# res.append(s[i+1: j+1]) 如果没有s = list(s)可以这么写
while s[i] == ' ':
i -= 1
j = i
return ' '.join(res)
在函数中,你尝试修改输入参数s
的值。但是在 Python 中,字符串是不可变的,你不能直接通过索引修改字符串的某个字符。因此,将s
转换为列表并尝试修改它的字符是不可行的。相反,你可以创建一个新的字符串或使用其他方法来处理反转的过程。
非常抱歉,我之前给出的解释有一些问题。实际上,在这个问题中,将`s`转换为列表`s = list(s)`是可行的,而且是一个常见的做法。
以下是关于代码中`s = list(s)`行的解释:
1. 将字符串`s`转换为列表的目的是为了可以通过索引修改列表中的字符。由于字符串是不可变的,无法直接通过索引修改字符串中的某个字符。通过将字符串转换为列表,你可以修改列表中的字符,然后将列表转换回字符串。
2. 在这段代码中,将`s`转换为列表是为了实现反转单词的功能。通过将字符串转换为列表,你可以通过修改列表中的字符来实现反转。然后,将反转后的列表再次转换为字符串并返回。
因此,在这种情况下,将`s`转换为列表是为了方便修改字符串中的字符。代码在对字符串进行反转和处理时,使用列表更加灵活。
对于你提供的代码,以下是我修复了之前提到的其他问题后的修改版:
```python
class Solution:
def reverseWords(self, s: str) -> str:
s = s.strip()
s = list(s)
res = []
i = j = len(s) - 1
while i >= 0:
while i >= 0 and s[i] != ' ':
i -= 1
res.append(''.join(s[i+1: j+1]))
while i >= 0 and s[i] == ' ':
i -= 1
j = i
return ' '.join(res)
```
这个修复版的代码在关键部分进行了修改。现在,它将`s[i+1: j+1]`转换为字符串后再添加到`res`列表中,以保持结果的正确性。同时,添加了对`i`的范围检查,以避免数组索引越界的问题。
我希望这次能够对你的问题进行更准确的解答。如果你还有其他问题,请随时提问。