当前位置: 移动技术网 > IT编程>脚本编程>Python > python字符串循环左移

python字符串循环左移

2019年03月19日  | 移动技术网IT编程  | 我要评论

夏川水滴,五十岚彩衣,打死不同台:冯巩死对头竟然是他

本文实例为大家分享了python字符串循环左移的具体代码,供大家参考,具体内容如下

字符串循环左移

给定一个字符串s[0…n-1],要求把s的前k个字符移动到s的尾部,如把字符串“abcdef”前面的2个字符‘a'、‘b'移动到字符串的尾部,得到新字符串“cdefab”:即字符串循环左移k位。
循环左移k位等价于循环右移n-k位。

算法要求:

时间复杂度为 o(n),空间复杂度为 o(1)。

分析思路:

暴力移位:

每次循环左移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),不符合要求

三次翻转:

(x'y')'=yx
如:abcdef
x=ab x'=ba
y=cdef y'=fedc
(x'y')'=(bafedc)'=cdefab
时间复杂度o(n),空间复杂度o(1),符合要求

python代码如下:

# 在python中字符串类型 'str' 不支持给它的item赋值,我们这里用list代替字符串

def leftloop(s, k):
 """
 字符串循环左移
 :param s: 字符串数组
 :param k: 字符串循环左移k位
 :return:
 """
 if s is none:
 return
 n = len(s)
 if n < k:
 return
 reverse(s, 0, k - 1)
 reverse(s, k, n - 1)
 reverse(s, 0, n - 1)


def reverse(s, i, j):
 """
 翻转
 :param s: 字符串数组
 :param i: 翻转开始位置
 :param j: 翻转结束位置
 """
 if s is none or i < 0 or j < 0 or i >= j or len(s) < j + 1:
 return
 while i < j:
 temp = s[i]
 s[i] = s[j]
 s[j] = temp
 i += 1
 j -= 1


if __name__ == '__main__':
 s = "abcdef"
 print(s)
 li = list(s);
 leftloop(li, 2)
 print(''.join(li))

输出结果:

abcdef
cdefab

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网