Advertisement

Python string left rotate

阅读量:

字符串循环左移

设有一个字符串S其索引范围从0到N-1现在要求将该字符串的前k个字符移动至末尾例如将字符串‘abcdef’中的前两个字符‘a’和‘b’转移至末尾即可得到新的串‘cdefab’这表明该操作相当于对原串进行了循环左移两位。
进一步可知进行一次循环左移相当于完成一次循环右移n减去k次的操作。
算法的具体实现需满足以下要求:
计算时间上具有线性复杂度O(n)在空间使用上仅需常数级别的存储即空间复杂度为O(1)。

分析思路:

暴力移位:
每一次循环左移一位,则经过k次循环即可完成
其时间复杂度为O(kN), 空间复杂度为O(1), 不满足要求

三次拷贝:
S[0…k] → T[0…k]
S[k+1…N-1] → S[0…N-k-1]
T[0…k] →S[N-k…N-1]
时间复杂度O(N),空间复杂度O(k),不符合要求

三次翻转的概念如下:
对于任意的字符串S和T,则(S'T)' = T'S。
例如:设S = abcdef。
其中:
设S的第一部分为S₁,则S₁'表示S₁的反转。
设S的后半部分为S₂,则S₂'表示S₂的反转。
因此:
(S₁'S₂)' = S₂'S₁
其时间复杂度为O(N),空间复杂度为O(1),满足需求。

Python代码如下:

复制代码
    # 在Python中字符串类型 'str'

全部评论 (0)

还没有任何评论哟~