leetcode 344
程序员文章站
2024-03-12 15:24:14
...
题目如下:
这是一道easy题,大概思路有两种:
- 双指针法
两个指针指向数组的首部和尾部,交换两个指针指向的字符,然后两个指针逐渐向中间靠拢,当首指针大于尾指针时结束循环。 - 递归
定义一个递归函数,每次交换数组首部和尾部的字符,直到递归结束。
下面给出具体的实现:
双指针法
class Solution {
public:
void reverseString(vector<char>& s) {
for(int i=0,j=s.size()-1;i<=j;++i,--j)
{
char temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
};
时间和空间复杂度分析:
递归
class Solution {
public:
void reverseString(vector<char>& s) {
swap(s,0,s.size()-1);
}
void swap(vector<char>&s,int start,int end)
{
if(start>end)return;
else {
char temp=s[start];
s[start]=s[end];
s[end]=temp;
swap(s,++start,--end);
}
}
};
时间和空间复杂度分析:
最后其实可以直接利用已经有的算法:reverse()
函数:
class Solution {
public:
void reverseString(vector<char>& s) {
reverse(s.begin(),s.end());
}
};
总结:刷了差不多20道题,感觉双指针这个方法用的还是比较多的,比如LeetCode26,27,88,167等等题目,需要多多学习。