欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode 344

程序员文章站 2024-03-12 15:24:14
...

题目如下:

leetcode 344
这是一道easy题,大概思路有两种:

  1. 双指针法
    两个指针指向数组的首部和尾部,交换两个指针指向的字符,然后两个指针逐渐向中间靠拢,当首指针大于尾指针时结束循环。
  2. 递归
    定义一个递归函数,每次交换数组首部和尾部的字符,直到递归结束。

下面给出具体的实现:

双指针法
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;
            
        }
        
    }
};

时间和空间复杂度分析:
leetcode 344

递归
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);         
        }
    }
};

时间和空间复杂度分析:
leetcode 344
最后其实可以直接利用已经有的算法:reverse()函数:

class Solution {
public:
    void reverseString(vector<char>& s) {
        
        reverse(s.begin(),s.end());
    }
};

总结:刷了差不多20道题,感觉双指针这个方法用的还是比较多的,比如LeetCode26,27,88,167等等题目,需要多多学习。