思路

1、建立双指针,一个指最前的元素,一个指最后的元素。将它们两两交换

设长度是n,反转可以看成s[0] = s[n-1],top指针指向s[0],end指针指向s[n-1],交换完毕后,top指针++,end指针--,交换s[1]=s[n-2],依次推类。
结束循环的条件:

  • 如果n是奇数,循环的条件为top = end = n/2
  • 如果n是偶数,最后交换的是top=n/2 - 1, end = n/2 然后各自移动一位变成 top = end+1 = n/2

偶数数组的情况
image
奇数数组的情况
image

综上所述,我们的循环条件可以设定为top>=end

复杂度分析:

  • 时间复杂度:O(N),N为s的长度
  • 空间复杂度:O(1),仅用到若干额外变量。

2、语法糖

  • s[::-1]表示反转s中的元素
  • s[:]表示数组中所有子模块
  • s[:]=s[::-1]表示将原数组反转后赋值给s中每一个对应的位置
  • s=s[::-1]表示将s反转后赋值给新的对象s(可以通过id函数查看内存地址),与题意原地修改不符。

class Solution:

点击查看代码
class Solution:
    def reverseString(self, s: List[str]) -> None:
        # s[:] = s[::-1] 是切片赋值语法,表示用 s[::-1] 替换 s 中的元素。
        # 注意不能写成 s = s[::-1],因为 s 只是一个局部变量,
        # 对它的修改不会影响到函数外部传入的实际参数。
        s[:] = s[::-1]
def reverseString(self, s: List[str]) -> None:
    # s[:] = s[::-1] 是切片赋值语法,表示用 s[::-1] 替换 s 中的元素。
    # 注意不能写成 s = s[::-1],因为 s 只是一个局部变量,
    # 对它的修改不会影响到函数外部传入的实际参数。
    s[:] = s[::-1]

题解参考来源于:https://leetcode.cn/problems/reverse-string/solutions/2376290/ji-chong-bu-tong-de-xie-fa-pythonjavacgo-9trb
题目来源:https://leetcode.cn/problems/reverse-string/description/

posted on 2024-02-26 22:37  逢考必过好吗秋梨膏  阅读(20)  评论(0)    收藏  举报