本文实例为大家分享了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

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

时间: 2019-03-05

python列表元素循环左移_python字符串循环左移相关推荐

  1. python字符循环左移_python字符串循环左移

    本文实例为大家分享了python字符串循环左移的具体代码,供大家参考,具体内容如下 字符串循环左移 给定一个字符串S[0-N-1],要求把S的前k个字符移动到S的尾部,如把字符串"abcde ...

  2. python列表元素交换位置_python删除列表元素5种方法,你会的是错误法还是最优解?...

    删除列表元素很多同学想当然的认为不就是循环遍历加上if判断再del吗?真的有这么简单吗? 还是直接上代码看案例吧: import time# 删除下面列表中所有张姓元素,输出的结果应该是['李老大', ...

  3. python列表元素为中文_python入门基础教程之Python list列表修改元素

    python提供了两种修改列表(list)元素的方法,你可以每次修改单个元素,也可以每次修改一组元素(多个). 修改单个元素 修改单个元素非常简单,直接对元素赋值即可.请看下面的例子: nums = ...

  4. python列表元素比较大小_python列表怎么比较大小

    Python中可以使用cmp()函数比较两个列表的大小. cmp()函数语法: cmp(list1, list2) 参数: list1 -- 比较的列表.list2 -- 比较的列表. 返回值: 如果 ...

  5. python列表元素都加倍_关于python列表增加元素的三种操作方法

    关于python列表增加元素的三种操作方法 1.insert方法,该方法包含两个参数,第一个参数为插入的位置参数,第二个参数为插入内容 a = [0,0,0] b = [1,2,3] a.insert ...

  6. python 列表、字典转json字符串

    python 列表.字典转json字符串 代码 import json data1 = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ] data ...

  7. python列表元素如何求和

    python实现列表对应元素求和的两种方法. 方法一:采用zip()方法: 1 2 3 4 5 6 7 8 9 10 11 12 # -*- coding: utf-8 -*- import math ...

  8. python 列表中的数字转字符串_python 将列表中的字符串转为数字

    python 将列表中的字符串转为数字 转自:https://www.jb51.net/article/86561.htm 本文实例讲述了Python中列表元素转为数字的方法.分享给大家供大家参考,具 ...

  9. python列表元素零的移动_python列表多行

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 这个列表推导式共有145列: memberdef_list = and std: ...

最新文章

  1. No subject
  2. 【Android 安全】使用 360 加固宝加固应用 ( 加固工具准备 | 生成签名 APK | 加固操作 | 反编译验证加固效果 )
  3. Pytorch中图像预处理相关函数
  4. 2013.10u-boot移植之增加nand保存环境变量
  5. java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)
  6. 信息学奥赛一本通(1125:矩阵乘法)
  7. 继爱奇艺之后,腾讯视频、优酷宣布:取消剧集超前点播服务
  8. 程序员放弃月薪2W的工作,改行做销售,结果垫底,网友:瞎折腾
  9. 软件测试--环境讲解
  10. iOS 学习 - 18.TextField 自定义菜单事件,复制和微信分享
  11. eplan2.6安装教程
  12. c语言fltk图形库,c-free-C/C++集成开发环境-c-free下载 v5.0官方版-完美下载
  13. 晶体管放大电路之应用
  14. 泛型编程和元编程概念(先学泛型编程再学元编程)
  15. 为你的整轨APE音乐制作CUE文件(图文)
  16. 免费下载 [discuz!插件] 404页死链优化SEO V2.6
  17. 从敏思博客的倒闭事件看历史重现...
  18. VUE输入 身份证 号,获取出生年月日
  19. 从零到一,全套搜狗收录教程分享
  20. Linux Shell查找下一个

热门文章

  1. APP上传应用商店加固后打包
  2. [内附完整源码和文档] 基于Qt5的国际跳棋双人网络对战游戏
  3. 我的男朋友是个GAY
  4. Java升级jdk_JDK8升级JDK11过程记录
  5. 瑞熙贝通--学校安全检查和隐患排查系统
  6. Python的作者吉多·范罗苏姆简介
  7. R语言学习系列之向量化计算
  8. Mavlink协议(第二版)
  9. 2022-2028年中国齿轮行业投资分析及前景预测报告
  10. Hadoop之机架感知