题目描述
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
思路与算法
使用两个指针,一个指向数组的开始位置,另一个指向数组的结束位置。
通过交换这两个位置的字符,逐步将数组从两端向中间反转。
每次交换之后,左指针向右移动,右指针向左移动,直到两者相遇或交错。(当 left 和 right 相遇或交错时,意味着数组已经完全反转,因此退出循环。)
代码
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
left, right = 0, len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
总结
双指针是解决很多线性数据结构问题的常见技巧。
边界条件,例如当数组为空或只有一个元素时,不需要进行任何操作。双指针方法自然能处理这些边界情况,因为指针不会相交或交错。