题目
针对一个字符串,该字符串是以字符列表的形式存在,请编写一个函数,实现将字符串反转过来。
例如:
给定一个字符列表:["h", "e", "l", "l", "o"],返回结果:["o", "l", "l", "e", "h"]
给定一个字符列表:["h", "a", "n", "n", "a", "H"],返回结果:["H", "a", "n", "n", "a", "h"]
说明:
- 不允许使用其他的列表,只能在原列表上处理
- 不允许使用编程语言的内置函数实现反转,也不允许对列表进行切片操作
实现思路1
- 使用
双指针
来实现 - 定义两个指针:left 和 right,left 从列表第一个位置向中间移动,right 从列表最后一个位置向中间移动
- left 和 right 移动过程中,每次都交换对应的元素,当 left 大于或等于 right 时,停止移动,此时即完成对列表元素的反转
代码实现1
def reverseString(s):
left, right = 0, len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
实现思路2
- 使用
位运算
来实现 - 针对列表 s,我们要实现原地反转,只需要让前一半元素与后一半元素进行交换即可,如果当前元素下标是 i,那么需交换元素的下标即为 - i - 1
- 在
~
按位取反运算中:~i
=- i - 1
,所以我们直接让 s[i] 与 s[~i] 交换就行
代码实现2
def reverseString(s):
for i in range(len(s) // 2):
s[i], s[~i] = s[~i], s[i]
更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)