我的個人微信公衆號:Microstrong
微信公衆號ID:MicrostrongAI
微信公衆號介紹:Microstrong(小強)同學主要研究機器學習、深度學習、計算機視覺、智能對話系統相關內容,分享在學習過程中的讀書筆記!期待您的關注,歡迎一起學習交流進步!
知乎主頁:https://www.zhihu.com/people/MicrostrongAI/activities
題目鏈接:
題目描述:
解題思路:
(1)利用Python的字符串切片
# -*- coding:utf-8 -*-
class Solution:
def LeftRotateString(self, s, n):
# write code here
return s[n:] + s[:n]
(2)找到字符串旋轉時每個字符移動的規律
要找到字符串旋轉時每個字符移動的規律,不是一件輕鬆的事情。那我們是不是可以從解決《翻轉單詞順序列》問題的思路中找到啓發?在這個問題中,如果輸入的字符串之中只有兩個單詞,比如”hello world”,那麼翻轉這個句子中的單詞順序就得到了”world hello”。比較這兩個字符串,我們是不是可以把”world hello”看成把原始字符串 ”hello world”的前面若干個字符轉移到後面?也就是說這兩個問題是非常相似的,我們同樣可以通過翻轉字符串的辦法來解決本問題。
以“abcdefg”爲例,我們可以把它分爲兩部分。由於想把它的前兩個字符移到後面,我們就把前兩個字符分到第一部分,把後面的所有字符分到第二部分。我們先分別翻轉這兩部分,於是就得到”bagfedc”。接下來翻轉整個字符串,得到的”cdefgab”剛好就是把原始字符串左旋轉兩位的結果。
通過前面的分析,我們發現只需要調用3次Reverse函數就可以實現字符串的左旋轉功能。已經AC的代碼如下:
# -*- coding:utf-8 -*-
class Solution:
def LeftRotateString(self, s, n):
# write code here
if len(s) == 0:
return s
s = list(s)
def Reverse(s, start, end):
for i in range(start, (start + end) // 2 + 1):
s[i], s[end - i + start] = s[end - i + start], s[i]
return s
n %= len(s)
# 翻轉字符串的前面n個字符
s = Reverse(s, 0, n - 1)
# 翻轉字符串的後面部分
s = Reverse(s, n, len(s) - 1)
# 翻轉整個字符串
s = Reverse(s, 0, len(s) - 1)
return "".join(s)
Reference:
【1】《劍指offer》,何海濤著。