美文网首页
Python编程题41--原地反转字符串

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

作者: wintests | 来源:发表于2022-01-08 11:22 被阅读0次

    题目

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

    例如:

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

    相关文章

      网友评论

          本文标题:Python编程题41--原地反转字符串

          本文链接:https://www.haomeiwen.com/subject/akosqrtx.html