2024/12/11 【字符串】LeetCode344.反转字符串 【√】解法众多:双指针,栈,range,reversed,切片,列表推导,reverse,交换函数实现的两种方法

news/2024/12/16 7:06:30/文章来源:https://www.cnblogs.com/spp20/p/18609067

解法1:双指针

因为while每次循环需要进行条件判断,而range函数不需要,直接生成数字,因此时间复杂度更低。推荐使用range
class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""n = len(s)i, j = 0, n-1while i < j:#1.常见的交换数值# temp = s[i]# s[i] = s[j]# s[j] = temp#2.通过位运算的异或运算实现交换两个数的操作# s[i] = chr(ord(s[i]) ^ ord(s[j]))# s[j] = chr(ord(s[i]) ^ ord(s[j]))# s[i] = chr(ord(s[i]) ^ ord(s[j]))#3.s[i], s[j] = s[j], s[i]i += 1j -= 1

1.C++中库函数swap()(交换函数)在Python中的对应

2.swap函数实现的两种方式

swap可以有两种实现。

一种就是常见的交换数值:如1

一种就是通过位运算:如2

位运算是一种直接对二进制位进行操作的运算,通常用于底层编程、硬件控制和性能优化等场景。

位运算操作的对象是整数类型的数据(比如 int),这些数据在计算机中以二进制形式存储。

位运算的主要特点是高效,因为它直接在二进制层面进行计算,通常比其他运算(如加减乘除)快。

按位异或(^)(常见位运算操作之一,还包括按位与(&),按位或(|),按位取反(~),左移(<<),右移(>>))

  • 功能:两个数的每个位都进行逻辑异或操作(相同为 0,不同为 1)。
  • 作用:可以用来翻转特定的二进制位。
  • 示例
    5 ^ 3  // 0101 ^ 0011 = 0110
    结果:6

位运算的应用场景

  1. 快速计算

    • 通过移位实现乘法和除法(如 x << 1 等价于 x * 2)。
  2. 标志位操作

    • 用于设置、清除、切换特定位。例如,用按位与清除某个位,用按位或设置某个位。
  3. 判断奇偶性

    • n & 1 == 0 表示偶数,n & 1 == 1 表示奇数。😍
  4. 位掩码

    • 通过掩码操作(与运算)保留特定的二进制位。
  5. 交换两个数

    • 通过异或运算实现:
    • a = a ^ b
      b = a ^ b
      a = a ^ b

3. 怎么理解通过异或运算实现交换两个数?

通过异或运算实现交换两个数的原理,利用了异或运算的性质

  • a⊕a=0 (一个数异或自身等于 0)
  • a⊕0=a(一个数异或 0 等于自身)
  • a⊕b⊕b=a(因为 b⊕b=0,所以 a⊕b⊕b=a

实现步骤

设两个数分别为 ab,通过以下三步实现交换:

    1. 第一步
      a=a⊕b
      此时,保存的是 a 和 b 的异或值。

    2. 第二步
      b=a⊕b
      因为 a 现在是 a⊕b,所以 b 变成了:
      b=(a⊕b)⊕b=a⊕(b⊕b)=a⊕0=a
      此时 b 保存了原来的 a 值

    3. 第三步
      a=a⊕b
      因为 b 现在是原来的 a,所以 变成了:
      a=(a⊕b)⊕b=a⊕(b⊕b)=a⊕0=b
      此时 a 保存了原来的 b 值

代码示例

以下是用 Python 实现的代码:

# 初始值
a = 5  # 二进制:0101
b = 3  # 二进制:0011# 交换过程
a = a ^ b  # a = 0101 ^ 0011 = 0110 (a 变为 6)
b = a ^ b  # b = 0110 ^ 0011 = 0101 (b 变为 5)
a = a ^ b  # a = 0110 ^ 0101 = 0011 (a 变为 3)print("a =", a)  # 输出:a = 3
print("b =", b)  # 输出:b = 5

用异或实现交互两个数的操作为什么可以不用临时变量?

普通交换两个数的代码需要一个临时变量,通过异或实现交换的方式,不需要额外的变量,因为所有的信息都保存在 b 的二进制中。它通过数学逻辑直接完成交换。

注意事项

    1. 如果 a 和 b 指向同一个内存位置(如 a 和 b 是同一个变量),则这种方法不适用。因为会导致数据被清零:
      a=a⊕a=0

    2. 在实际开发中,虽然异或交换节省了一个临时变量,但现代编译器优化已经非常强大,普通交换(用临时变量)也能生成高效的代码。因此异或交换主要用作教学示例或在极端优化场景下使用。

4. 如果是两个字符进行交换可以用这个方法吗?

异或运算可以用于交换两个字符,因为字符在底层是以整数形式(ASCII 或 Unicode 值)存储的,而异或操作本质上是对整数进行操作。只要将字符视为整数,就可以使用同样的方法实现交换。

Python 示例

以下是交换两个字符的代码:

# 初始值
a = 'A'  # 字符 'A' 的 ASCII 值是 65
b = 'B'  # 字符 'B' 的 ASCII 值是 66# 交换过程
a = chr(ord(a) ^ ord(b))  # 将字符转换为整数进行异或,再转回字符
b = chr(ord(a) ^ ord(b))
a = chr(ord(a) ^ ord(b))# 输出结果
print("a =", a)  # 输出:a = B
print("b =", b)  # 输出:b = A

解释

  1. ord():将字符转换为其对应的 ASCII 或 Unicode 值。例如,ord('A') 返回 65
  2. chr():将整数值转换回字符。例如,chr(65) 返回 'A'

通过 ord()chr(),可以在字符和整数之间自由转换,从而使用异或交换字符。

注意事项

  1. 适用范围:字符的交换适用于所有单个字符(如 'a''A''你'),因为它们都可以被映射为整数。
  2. 不要用于字符串:如果需要交换的是多字符字符串,这种方法就不适用了,因为字符串不直接对应单个整数。

5.C++有^=这个符号,Python里面有^=这个符号吗?

是的,Python 中有 ^= 运算符,它是一种按位异或赋值运算符

注意事项

  1. ^= 的作用范围:只适用于整数和可以转换为整数的数据(如字符)。
  2. 与其他运算符类似^= 的用法与 +=-=*= 等运算符一致,只是它对应的是异或操作。

解法2:使用栈

class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""stack = []for char in s:stack.append(char)for i in range(len(s)):s[i] = stack.pop()

1. Python中栈的表达:

stack = []

2. Python中加入元素到栈,和从栈中弹出元素的方法:

#加入栈
stack.append(char)
#弹出栈
s[i] = stack.pop()

解法3:使用range

class Solution:def reverseString(self, s: List[str]) -> None:n = len(s)for i in range(n//2):s[i], s[n-i-1] = s[n-i-1], s[i]i += 1

1. python中“//”和“/”的区别是什么?

解法4:使用reversed

class Solution:def reverseString(self, s: List[str]) -> None:s[:] = reversed(s)

1. 介绍reversed函数和reverse函数

2.为什么表达成

s[:] = reversed(s)可以正确运行,但是
s = reversed(s)不行,以及
s[:]是什么意思?

解放5:使用切片

class Solution:def reverseString(self, s: List[str]) -> None:s[:] = s[::-1]

看不懂这个表达

解法6:使用列表推导

class Solution:def reverseString(self, s: List[str]) -> None:s[:] = [s[i] for i in range(len(s)-1, -1, -1)]

看不懂这个表达

解法7:使用reverse()

class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""# 原地反转,无返回值s.reverse()

 

 




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/853599.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用新数据重建旧类,实现无样本的持续学习

用新数据重建旧类,实现无样本的持续学习众所周知,持续学习方法会遭受灾难性遗忘,对于不存储先前任务示例的方法来说,这种现象尤其难以应对。因此,为了减少特征提取器中的潜在漂移,通常在第一个任务明显大于后续任务的情况下评估现有的无样本方法。从较小的第一个任务开始…

转发:《智能汽车传感器:原理设计应用》新书推荐

《智能汽车传感器:原理设计应用》新书推荐 由化学工业出版社资深编辑张海丽老师负责策划编辑。 本书在京东、淘宝天猫、当当网上均有销售 京东:https://search.jd.com/Search?keyword=%E6%99%BA%E8%83%BD%E6%B1%BD%E8%BD%A6%E4%BC%A0%E6%84%9F%E5%99%A8%EF%BC%9A%E5%8E%9F%E…

通过知识提炼增强单视图场景的自监督方法

通过知识提炼增强单视图场景的自监督方法通过运动结构从图像中推断场景几何是计算机视觉中一个长期存在的基本问题。虽然经典方法和最近的深度图预测只关注场景的可见部分,但场景完成的任务旨在推理即使在遮挡区域中的几何形状。随着神经辐射效应(NeRF)的普及,隐式表示也通…

【bWAPP靶场】OS Command lnjection - Blind

命令盲注就是注入后没有返回信息,要根据反应时间判断命令是否成功执行 输入127.0.0.1输入 ||whoami `sleep 5 `

【bWAPP靶场】OS Command Injection

Level:low payload:www.nsa.gov;whoami原理:在DNS查询之后再执行dir命令 Level:medium 查看源码commandi_check_1是把&和;替换了,还可以使用| 构造payload:www.nsa.gov| whoamiLevel:high 查看源码escapeshellcmd()函数用来跳过字符串中的特殊符号,防止恶意用户通过…

【Windows安全】Windows文件关联深度解析:原理、应用与修复

在Windows操作系统中,文件关联是一项至关重要的功能,它决定了当用户双击一个文件时,哪个应用程序会被用来打开这个文件。文件关联机制通过将文件扩展名与特定的应用程序建立起一种依存关系,使得用户无需每次都手动选择打开文件的程序,从而提高了操作效率。本文将深入探讨W…

综合设计——多源异构数据采集与融合应用综合实践——个人总结

这个项目属于哪个课程 2024数据采集与融合技术实践组名、项目简介 组名:scrapy能帮我爬到美味蟹黄堡的秘方吗项目需求:文物不能很好的融入我们的生活,它们仿佛一具冰冷的尸体躺在博物馆的展示柜中,静静地接受着岁月的侵蚀和尘埃的覆盖。项目目标:赋予文物新的生命力,让它…

第 3 单元:微分:复合函数、隐函数和反函数 (链式法则、复合函数)

链式法则 常见的链式法则误解 例子: 例子: 识别复合函数 例子: 例子:利用链式法则求 cos(x) 的导数 例子:利用链式法则求 √(3x-x) 的导数 例子:利用链式法则求 ln(√x) 的导数 例子:

KubeWall:一款现代化的 Kubernetes 集群管理工具

以下文章来源于Github爱好者 ,作者KubeWall KubeWall 是一款功能强大的 Kubernetes 多集群管理工具,采用单一二进制文件的简便部署方式,为用户提供直观且易用的 Web 界面,用于高效管理和监控 Kubernetes 集群。为什么选择 KubeWall? KubeWall 致力于简化 Kubernetes 集群的…

【HW系列+技战法】网络监控告警及多角度资产安全加固技战法

一、技战法概述 随着公司的生产业务和网络不断增加建设,企业和组织面临着越来越多的设备、系统。关键节点设备是否采用冗余架构部署,是否存在设备单点故障风险,遭受网络攻击时是否可以及时进行响应等,它们是保障公司运行稳定性和连续性的重要课题。同时,我们还需要对关键设…

多源异构数据采集与融合应用综合实践

综合设计——多源异构数据采集与融合应用综合实践 Recomind荐宝这个作业属于哪个课程 首页 - 2024数据采集与融合技术实践 - 福州大学 - 班级博客 - 博客园组名、项目介绍 组名:超级无迪爬虫高手元始天尊暴龙战士 Recomind荐宝是一款创新型的购物推荐网站,它整合了多源异构数…