題目:
- A是含有n個元素的數組,如果可以申請到最大內存,那么把A從位置i開始旋轉是比較簡單的。例如:A:a,b,c,d,e.其中i=3,旋轉后的字符串A為:d,e,a,b,c
- 要求設計一個時間復雜度為O(n),空間復雜度為O(1)的算法,實現字符串A從給定位置開始旋轉。
思路:
- 步驟一:首先將字符串整體旋轉;
- 步驟二:將旋轉后的字符串按照旋轉中心,分為兩部分,再分別旋轉兩個部分。
"""
題目:
A是含有n個元素的數組,如果可以申請到最大內存,那么把A從位置i開始旋轉是比較簡單的。例如:A:a,b,c,d,e.其中i=3,旋轉后的字符串A為:d,e,a,b,c
要求設計一個時間復雜度為O(n),空間復雜度為O(1)的算法,實現字符串A從給定位置開始旋轉
"""
"""
思路:
步驟一:首先將字符串整體旋轉;
步驟二:將旋轉后的字符串按照旋轉中心,分為兩部分,再分別旋轉兩個部分。
"""#設計函數,將將整個字符串倒轉
def roundString(S):begin = 0end = len(S) - 1ss = list(S)#交換begin和end執行的字符while begin < end:temp = ss[begin]ss[begin] = ss[end]ss[end] = tempbegin += 1end -= 1return ''.join(ss)# #測試代碼
# s ="abcdef"
# #旋轉后的字符串應該是fedcba
# s = roundString(s)
# print(s)#將給定字符串從位置i開始旋轉
def rotateString(s,i):#首先將整個字符串倒轉,產生數組s0 = roundString(s)#倒轉后,整個字符分為前半部分的n-i個字符,后半部分的i個字符#第一部分:??t1 = s0[0:len(s0)-i]print(t1)#第二部分:??t2 = s0[len(s0)-i:]print(t2)# 分別將兩個部分旋轉s1 = roundString(s0[0:len(s0)-i])s2 = roundString(s0[len(s0)-i:])#將旋轉后的兩個部分合并return s1 + s2s ="abcdef"
i = 4
#旋轉后的字符串應該是efabcd
s = rotateString(s,i)
print(s)
運行結果:
fe
dcba
efabcd