python字符串循环左移


Posted in Python onMarch 08, 2019

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

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

Python 相关文章推荐
Python通过解析网页实现看报程序的方法
Aug 04 Python
Python2.x版本中cmp()方法的使用教程
May 14 Python
Python实现的最近最少使用算法
Jul 10 Python
Python selenium 三种等待方式解读
Sep 15 Python
python如何获取服务器硬件信息
May 11 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
Python进阶之全面解读高级特性之切片
Feb 19 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 Python
利用python-docx模块写批量生日邀请函
Aug 26 Python
Python内置类型性能分析过程实例
Jan 29 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 Python
asyncio异步编程之Task对象详解
Mar 13 Python
详解Python Matplot中文显示完美解决方案
Mar 07 #Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 #Python
Python3实现的判断环形链表算法示例
Mar 07 #Python
浅析Python 读取图像文件的性能对比
Mar 07 #Python
python try 异常处理(史上最全)
Mar 07 #Python
通过shell+python实现企业微信预警
Mar 07 #Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 #Python
You might like
关于手调机和数调机的选择
2021/03/02 无线电
PHP Try-catch 语句使用技巧
2016/02/28 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
npm全局环境变量配置详解
2020/12/15 Javascript
python3图片转换二进制存入mysql
2013/12/06 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
英文邀请函
2015/02/02 职场文书
办公室文员岗位职责
2015/02/04 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python