344-反转字符串
大约 1 分钟
题目地址(344. 反转字符串 - 力扣(LeetCode))
https://leetcode.cn/problems/reverse-string/
题目描述
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 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"]
提示:
1 <= s.length <= 10 5
s [i]
都是 ASCII 码表中的可打印字符
前置知识
- 字符串
- 双指针
思路
使用两个指针 l
, r
分别指向字符数组首元素,字符数组尾元素。
当 l < r
时,交换 l 和 r 指向的元素。
当 l == r
时,就表示反转结束。
关键点
s[i]
与s[n-1-i]
交换
代码
- 语言支持:Java
Java Code:
class Solution {
public void reverseString(char[] s) {
//O(1)
int left = 0;
int right = s.length - 1;
while(left < right){
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
复杂度分析
令 n 为数组长度。
- 时间复杂度:, 一共执行了
n/2
次交换。 - 空间复杂度:,两个指针,常数的空间。