344. 反转字符串 Easy
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
示例 1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:
输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
解题思路
输入:一个字符列表 s
,表示原始字符串,需原地反转
输出:将字符顺序反转,直接修改输入列表 s
,不返回新值
本题是典型的 相向双指针 问题。
我们可以定义两个指针:left = 0
,right = len(s) - 1
,分别指向字符串的开头和结尾。
然后进行如下操作:
- 当
left < right
时,不断交换s[left]
和s[right]
; - 每次交换后,将
left
向右移一位,right
向左移一位; - 当两个指针相遇或交错时,说明已经完成整个字符串的反转。
代码实现
python
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:
# 使用 Python 的交换语法,省略临时变量
s[left], s[right] = s[right], s[left]
# 移动指针向中间靠拢
left += 1
right -= 1
javascript
/**
* @param {character[]} s
* @return {void} Do not return anything, modify s in-place instead.
*/
const reverseString = function(s) {
let left = 0;
let right = s.length - 1;
while (left < right) {
const temp = s[left];
s[left] = s[right];
s[right] = temp;
left ++;
right --;
}
};
复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)