面試題58 - II. 左旋轉字符串

字符串的左旋轉操作是把字符串前面的若干個字符轉移到字符串的尾部。請定義一個函數實現字符串左旋轉操作的功能。比如,輸入字符串"abcdefg"和數字2,該函數將返回左旋轉兩位得到的結果"cdefgab"。

思路1

沒啥可說的
在對於大數據時join的效率要高於+
因爲+操作是生成一個新的字符串,需要創建額外的內存,當數據量大時會很耗內存的
join對多個字符進行連接時效率高,只會有一次內存的申請。而且如果是對list的字符進行連接的時候,這種方法必須是首選

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        if s:
            return ''.join([s[n:],s[:n]])
        else:
            return ""

思路2:三次旋轉法

其實這個問題是<<翻轉單詞順序>>的一個衍生
我們來看例子s = “abcdefg”, k = 2
步驟:
先將s看成兩部分s[:2]和s[2:],然後分別翻轉這兩部分,此時s變爲s = “bagfedc”
再將現在的s進行翻轉,變成s = “cdefgab”,這就是結果
時間複雜度爲O(n)

class Solution(object):
    def reverseLeftWords(self, s, n):
        """
        :type s: str
        :type n: int
        :rtype: str
        """
        if n > len(s) or not s:
            return ''
        s = list(s)
        def reverse(start, end):
            while start < end:
                s[start], s[end] = s[end], s[start]
                start += 1
                end -= 1
        length = len(s) - 1
        reverse(0, n-1)
        reverse(n,length)
        reverse(0, length)
        return ''.join(s)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章