Python编程题41--原地反转字符串

题目

针对一个字符串,该字符串是以字符列表的形式存在,请编写一个函数,实现将字符串反转过来。

例如:

给定一个字符列表:["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编程题汇总(持续更新中……)

上一篇:链表——约瑟夫问题


下一篇:C++-callback回调函数集合