tag-字符串:反转字符串

题目

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例

在这里插入图片描述

题解一

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        # 这个操作的效率比较低,因为它涉及到了两个步骤:首先生成了一个反转后的列表 s[::-1],然后将这个反转后的列表赋值给原始列表 s[:]
        # 在Python中,s[:]是一个切片操作,它表示对列表s进行整体切片,相当于创建了一个s的副本。因此,s[:]表示整个列表s的一个浅拷贝。
        s[:]=s[::-1]

在这里插入图片描述

对于上面代码的几点疑问,不一定关于本次话题,而是一些知识点的补充
1、为什么不使用s=s[::-1],而是s[:]=s[::-1]?
首先,s只是对象的引用,s=s[::-1]使s指向了新的对象,并没有修改原对象。而s[:]是切片操作,s[:] 实际上是获取了 s 列表的一个"引用"时,这个引用指的是 s 列表中元素的引用,而不是 s 列表对象本身的引用,因此这个赋值操作更改的元素本身。
可以看个例子:

a = [1, 2, 3]
b = a  # b引用了a所指向的对象
b[0] = 100  # 修改了b所引用的对象
print(a)  # 输出 [100, 2, 3],原始对象也被修改了

b = [4, 5, 6]  # 现在b指向了一个新的对象
print(a)  # 输出 [100, 2, 3],原始对象不受影响

题解二

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        # 双指针写法
        left=0
        right=len(s)-1
        while left<right:
        	# 下面三行也可以简化为:s[left],s[right]=s[right],s[left],这个会同时执行交换
            tmp=s[left]
            s[left]=s[right]
            s[right]=tmp
            left+=1
            right-=1

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值