Leetcode | 344. 反轉字符串

2021-03-02 guangerTalks

(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!🤣

相關焦點

  • leetcode之字符串相加
    序本文主要記錄一下leetcode之字符串相加題目給定兩個字符串形式的非負整數 num1 和num2 ,計算它們的和。
  • 經典leetcode算法題分享(字符串)
    344. 反轉字符串題目:編寫一個函數,其作用是將輸入的字符串反轉過來。解題思路:一看到這道題,直呼是送分題,這反轉字符串不就是JavaAPI就有了嗎,於是乎直接大膽的,兩行代碼搞定,好傢夥!一下子重拾回作為程式設計師的信心!
  • 【每日leetcode】左旋轉字符串
    題目字符串的左旋轉操作是把字符串前面的若干個字符轉移到字符串的尾部。請定義一個函數實現字符串左旋轉操作的功能。比如,輸入字符串"abcdefg"和數字2,該函數將返回左旋轉兩位得到的結果"cdefgab"。
  • AK leetcode 流浪計劃 - 數組反轉
    一、簡介二、基本操作步驟三、作用四、反轉模板交換元素的方法模板總結1 反轉數組區間2 反轉數組區間中的特定元素五、牛刀小試練習1 反轉字符串題目大意題目解析AC代碼練習2 反轉鍊表題目大意題目解析思路AC代碼練習3 反轉字符串中的元音字母題目大意題目解析AC代碼練習4 反轉字符串中的單詞 III題目大意題目解析AC代碼六、代碼模板七、總結八
  • leetcode:對撞指針系列
    -125:描述:給定一個字符串,驗證它是否是回文串,只考慮字母和數字字符,可以忽略字母的大小寫。,最後將字符串轉換為數組。-344:描述:編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[] 的形式給出。不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。你可以假設數組中的所有字符都是 ASCII 碼錶中的可列印字符。
  • 整數反轉 | Leetcode題解
    請根據這個假設,如果反轉後整數溢出那麼就返回 0。難度:支持語言:JavaScript、Java、Python相關標籤相關企業思路 1:使用字符串在反轉並不是最好的選擇,因為還需要處理負號和0的情況,用數字運算方式反轉比較適合。
  • 無重複字符的最長子串 | Leetcode題解
    示例 1:輸入: "abcabcbb"輸出: 3解釋: 因為無重複字符的最長子串是 "abc",所以其長度為 3。示例 2:輸入: "bbbbb"輸出: 1解釋: 因為無重複字符的最長子串是 "b",所以其長度為 1。
  • LeetCode-87.擾亂字符串(Scramble String)
    擾亂字符串給定一個字符串 s1,我們可以把它遞歸地分割成兩個非空子字符串,從而將其表示為二叉樹。下圖是字符串 s1 = "great" 的一種可能的表示形式。例如,如果我們挑選非葉節點 "gr" ,交換它的兩個子節點,將會產生擾亂字符串 "rgeat" 。
  • [LeetCode] 943. Find the Shortest Superstring 找到最短的超級字符串
    A,讓我們找一個最短的字符串,使得所有A中的字符串是都該字符串的子串,並給了兩個例子。首先來解決復用字符個數計算的問題,為了避免重複計算,可以直接計算任意兩個字符串之間的復用字符的個數,用一個二維數組 overlap 表示,其中 overlap[i][j] 表示字符串 A[i] 和 A[j] 之間的復用字符的個數,比如 abc 和 bca 的復用個數是2,注意 overlap[j][i] 不一定等於 overlap[i][j],比如 bca 和 abc 的復用字符個數就是1個。
  • LeetCode刷題筆記 - 3. 無重複字符的最長子串
    官方連結:https://leetcode-cn.com/problemset/all/一、題意難度:中等https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
  • AK leetcode 流浪計劃 - 回文串
    題目連結:https://leetcode-cn.com/problems/valid-palindrome/題目大意給定一個字符串,驗證它是否是回文串,只考慮字母和數字字符,可以忽略字母的大小寫。://leetcode-cn.com/problems/can-make-palindrome-from-substring/題目大意給你一個字符串 s,請你對 s 的子串進行檢測。
  • 圖解LeetCode第 3 號問題:無重複字符的最長子串
    題目描述 給定一個字符串,找出不含有重複字符的最長子串的長度。示例 1:  輸入: "abcabcbb"   輸出: 3   解釋: 無重複字符的最長子串是 "abc",其長度為 3。示例 2:  輸入: "bbbbb"  輸出: 1.     解釋: 無重複字符的最長子串是 "b",其長度為 1。
  • 笨方法刷 leetcode(一)
    題目描述:實現一個算法,確定一個字符串 s 的所有字符是否全都不同示例 1:輸入: s = "leetcode"輸出: false>python中有一個內置函數set(),它的一個特性就是->可以利用已有列表、字符串、元組或字典的內容來創建集合,其中重複的值會被丟棄;所以就可以通過set()來得到一個剔除重複值後的集合,並且比較兩者的長度,如果長度相等,則證明字符唯一;如果長度不等,則字符不唯一代碼如下:class
  • JAVA 中如何反轉字符串字符,一共4中方式,請牢記!
    比如:String str = "abcd";通過反轉倒序後輸出:dcba故此文本主要講述如何將 String 類型的字符串字母倒序過來的幾種方法。下面就列舉如下4種方法並一一說明!其實也很簡單,通過如下幾步即可:將字符串轉為 char[]數組逐個循環 char[]數組使用 temp 變量進行值交換上面的源碼算法實現需要5個循環(長度/ 2)來使字符串倒序
  • 一招解決4道leetcode hard題,動態規劃在字符串匹配問題中的應用
    在做leetcode的時候,遇到hard題大家往往都覺得頭疼,但其實,掌握方法,舉一反三,hard題有時候我們也能想到好的思路,順利攻破,今天我們就介紹一下動態規劃在字符串匹配中的應用,相同類型的題目在前120道題中居然出現了4次!有必要好好總結一下!這四道題分別是:10.
  • 最長回文子串 | Leetcode題解
    題目描述給定一個字符串 s,找到 s 中最長的回文子串。你可以假設  s 的最大長度為 1000。5.longest-palindromic-substring解決這類問題的核心思想就是兩個字「延伸」,具體來說如果在一個不是回文字符串的字符串兩端添加任何字符,或者在回文串左右分別加不同的字符,得到的一定不是回文串
  • 上升下降字符串 | LeetCode
    」今天的每日一題是字符串的easy題目,可我還是花了有一二十分鐘,許久不刷題手都生了。題目 上升下降字符串給你一個字符串 s ,請你根據下面的算法重新構造字符串:從 s 中選出 最小 的字符,將它 接在 結果字符串的後面。從 s剩餘字符中選出 最小 的字符,且該字符比上一個添加的字符大,將它 接在 結果字符串後面。
  • LeetCode 熱題 HOT 100(02,無重複字符的最長子串)
    題目:無重複字符的最長子串給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。題目Url:https://leetcode.com/problems/longest-substring-without-repeating-characters/示例輸入: "abcabcbb"輸出: 3 解釋: 因為無重複字符的最長子串是 "abc",所以其長度為 3。
  • 面試官讓用 5 種 python 方法實現字符串反轉 ?對不起我有16種……
    最後同樣通過join()方法,反轉合併字符串。先創建一個字符串倒序相加函數和字符串,一起傳入reduce函數中,運行,就可以進行字符串倒序累積相加,最後反轉字符串。 方法十:匿名函數法a = 'abcdef'b = reduce(lambda x,y:y+x,a)print(b)方法九的進階版,使用lambda匿名函數創建字符串倒序相加函數,然後進行累積,得到字符串反轉結果。
  • 第五題:最長回文子串【leetcode】
    給定一個字符串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。