(unsplash)
題目
編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[] 的形式給出。
不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。
你可以假設數組中的所有字符都是 ASCII 碼錶中的可列印字符。
示例 1:
示例 2:
輸入:[「H」,」a」,」n」,」n」,」a」,」h」]
輸出:[「h」,」a」,」n」,」n」,」a」,」H」]
方法一
不多說,先用雙指針問題處理。直接貼代碼:
時間複雜度:O(N),其中N是字符串的長度,共執行了N/2次交換
空間複雜度:O(N),僅存放若干變量
def reverseString(self, s: List[str]) -> None:
Do not return anything, modify s in-place instead.
left, right = 0, length-1
s[left], s[right] = s[right], s[left]
運行時間:
執行用時:56 ms, 在所有 Python3 提交中擊敗了30.58% 的用戶
內存消耗:19.1 MB, 在所有 Python3 提交中擊敗了20.21% 的用戶
關於循環的寫法,還可以使用for循環:
def reverseString(self, s: List[str]) -> None:
Do not return anything, modify s in-place instead.
for i in range(length//2):
s[i], s[length-1-i] = s[length-1-i], s[i]
方法二
將原數組反轉後,賦值給s中每一個對應的位置,注意:代碼是s[:] = s[::-1],注意不是s = s[::-1]。
一行簡單代碼即搞定。Python大法。。。
def reverseString(self, s: List[str]) -> None:
Do not return anything, modify s in-place instead.
運行時間:
執行用時:40 ms, 在所有 Python3 提交中擊敗了94.31% 的用戶
內存消耗:19.2 MB, 在所有 Python3 提交中擊敗了15.06% 的用戶
方法三
使用Python內置方法reverse()即可。
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
s.reverse()
運行時間:
執行用時:40 ms, 在所有 Python3 提交中擊敗了94.31% 的用戶
內存消耗:19.2 MB, 在所有 Python3 提交中擊敗了13.93% 的用戶
Done!🤣