代码随想录Day8|344.反转字符串、541.反转字符串II、 剑指Offer 05.替换空格 、

目录

 344. 反转字符串

        双指针

        库函数

 541. 反转字符串 II

 剑指 Offer 05. 替换空格

         暴力解法

         双指针

151. 反转字符串中的单词

        用库函数


 344. 反转字符串

代码随想录 (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]

 541. 反转字符串 II

 代码随想录 (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)

 剑指 Offer 05. 替换空格

         暴力解法

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)

数组扩展上不太理解

151. 反转字符串中的单词

代码随想录 (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`的范围检查,以避免数组索引越界的问题。

我希望这次能够对你的问题进行更准确的解答。如果你还有其他问题,请随时提问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值