題目概要
使用原地演算法(in-place algorithm)
將題目給定的字串s
進行倒轉(reverse) 。
原地演算法(in-place algorithm)
:不藉助額外的資料結構就能對輸入的資料進行變換的演算法。(分配少量空間給部分輔助變數是允許的。)
- 舉例:s = [“H”,“a”,“n”,“n”,“a”,“h”];倒轉後即 [“h”,“a”,“n”,“n”,“a”,“H”]。
解題思路
- 利用兩個指標(左右指標i,j)逐漸由左右兩側往中間接近,每次移動一個單位,移動前置換彼此。
- 當兩指標在中央相會時即完成所有置換的動作。
參考程式碼
1 2 3 4 5 6 7 8 9 10 11 12
| class Solution { public: void reverseString(vector<char>& s) { int i=0,j=s.size()-1; while(i<j) { char temp=s[i]; s[i]=s[j]; s[j]=temp; i++; j--; } } };
|
1 2 3 4 5 6 7
| class Solution: def reverseString(self, s: List[str]) -> None: l,r=0,len(s)-1 while l<r: s[l],s[r]=s[r],s[l] l+=1 r-=1
|
1 2 3
| class Solution: def reverseString(self, s: List[str]) -> None: s.reverse()
|
LeetCode 344 - Reverse String