题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/reverse-string
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须 原地 修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"]示例 2:
输入:["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"]如若单纯为了达到 反转字符串 的目的,对于 Python 而言,这道题直接调用内置函数 reverse() 就能够得到结果,但这并不是此题的本意。
先看看本题中的要求及限制。
要求:
编写函数,将输入的字符串反转过来。其中给定的字符串以字符数组的形式给出。限制:
不能分配额外的空间,使用 O ( 1 ) O(1) O(1) 的空间,原地修改输入数组。在这里,我们可以使用双指针的方法。两个指针中其中一个从左往右遍历,另外一个从右往左遍历,遍历的同时交换字符。
具体的做法如下:
定义双指针 left、right。left 指向数组头部,right 指向数组尾部;交换字符,同时将 left 往右移动一个位置,将 right 往左移动一个位置;重复第二个步骤,直至 left、right 指针重合。这里额外提下,在第二个步骤中,如若非严格需要交换,即是当遇到 left、right 指针指向的元素相同时,不进行交换只移动指针。
不过,下面的代码,严格按照位置交换。
class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ # 定义指针 left = 0 right = len(s) - 1 # left、right 指针重合前,遍历数组,交换字符 while left < right: # 交换字符 s[left], s[right] = s[right], s[left] # 移动指针 left += 1 right -= 1公众号 【书所集录】
如有错误,烦请指出,欢迎指点交流
