字符串反轉 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;
            
        }
        
    }
};

時間和空間複雜度分析:
結果分析

遞歸
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等等題目,需要多多學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章