題目:組合語言中有一種移位指令叫做迴圈左移(rol),現在有個簡單的任務,就是用字串模擬這個指令的運算結果。
對於乙個給定的字串行s,請你把其迴圈左移k位後的序列輸出。例如,字串行s=」abcxyzdef」,要求輸出迴圈左移3位後
的結果,即「xyzdefabc」。是不是很簡單?ok,搞定它
切片 + 拼接
對原字串進行擴充兩倍,在這個基礎上直接從要反轉的地方取就可以,相當於前n個字串翻轉了,思想非常好
首先需要寫乙個reverse函式,把任何輸入的字串完全翻轉。然後根據題目中給出的左旋轉字串的個數n,
用全字串長度length減去旋轉字串個數n,求得對於新的字串應該在哪一位進行旋轉,然後分別旋轉前[:length-n]子
串和[length-n:]子串,重新拼接兩個子串即可。
舉例: n=2
1 2 3 4 5
5 4 3 2 1 整體反轉
3 4 5 1 2 對於5-2=3部分翻轉,對於最後2 1再部分翻轉
'''思路一:
29ms
5760k
'''#
-*- coding:utf-8 -*-
class
solution:
defleftrotatestring(self, s, n):
#write code here
return s[n:] +s[:n]
'''思路二:對原字串進行擴充兩倍,在這個基礎上直接從要反轉的地方取就可以,相當於前n個字串翻轉了,思想非常好
28ms
5760k
'''#
-*- coding:utf-8 -*-
class
solution:
defleftrotatestring(self, s, n):
#write code here
ifnot
s:
return
''length =len(s)
s +=s
return s[n:length +n]
'''盡量避免使用內建函式
思路三:首先需要寫乙個reverse函式,把任何輸入的字串完全翻轉。然後根據題目中給出的左旋轉字串的個數n,
用全字串長度length減去旋轉字串個數n,求得對於新的字串應該在哪一位進行旋轉,然後分別旋轉前[:length-n]子
串和[length-n:]子串,重新拼接兩個子串即可。
舉例: n=2
1 2 3 4 5
5 4 3 2 1 整體反轉
3 4 5 1 2 對於5-2=3部分翻轉,對於最後2 1再部分翻轉
28ms
5760k
'''#
-*- coding:utf-8 -*-
class
solution:
defleftrotatestring(self, s, n):
#write code here
ifnot s or len(s) < n or n <0:
return
''s =list(s)
length =len(s)
s =self.reverse(s)
s1 = self.reverse(s[:length -n])
s2 = self.reverse(s[length -n:])
result = ''.join(s1) + ''
.join(s2)
return
result
defreverse(self, s):
start =0
end = len(s) - 1
while start s[start], s[end] =s[end], s[start]
start += 1end -= 1
return s
s = "shdkfhkxm
"def
func(s, k):
return s[k:] +s[:k]
print(func(s, 3)) #
kfhkxmshd
演算法 字串問題 翻轉字串
翻轉字串 給定乙個字元型別的陣列chas,請在單詞間作逆序調整。只要做到單詞順序逆序即可。例如,如果看成字串 dog loves pig 則調整為 pig loves dog 過程 先整體逆序,在區域性單詞逆序 public static void rotateword char chas reve...
翻轉字串 翻轉單詞字串
將一句話裡面的單詞進行倒置,標點符號不倒換。比如一句話 i come from china.倒換後變成 china.from come i 解析 解決該問題可以分為兩步,第一步全盤置換為 anihc morf emoc i 第二部對每個單詞進行逐步翻轉,如果不是空格,則開始翻轉單詞。具體 如下 in...
字串翻轉
遞迴入門 字串翻 將字串 test 翻轉,變為 tset 解法 遞迴 此題的遞迴跟判斷回文字串的解法原理一樣。只是不是比較兩端字元,而是直接交換。include using namespace std int str turn int low,int high,char p,int length t...