题目:
- 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