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进阶教程之模块(module)介绍
Aug 30 Python
Python中动态获取对象的属性和方法的教程
Apr 09 Python
Python下的twisted框架入门指引
Apr 15 Python
Python利用operator模块实现对象的多级排序详解
May 09 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
python 并发编程 非阻塞IO模型原理解析
Aug 20 Python
Django获取应用下的所有models的例子
Aug 30 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
用python解压分析jar包实例
Jan 16 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
python爬虫泛滥的解决方法详解
Nov 25 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
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
php微信开发之谷歌测距
2018/06/14 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
JavaScript经典效果集锦
2010/07/06 Javascript
JS实现动态生成表格并提交表格数据向后端
2020/11/25 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
详解js中Array的方法及技巧
2018/09/12 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
python sys模块sys.path使用方法示例
2013/12/04 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
django主动抛出403异常的方法详解
2019/01/04 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
使用python实现CGI环境搭建过程解析
2020/04/28 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
猫咪家具:CatsPlay
2018/11/03 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
主题实践活动总结
2014/05/08 职场文书
创建青年文明号材料
2014/05/09 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
感谢信怎么写
2015/01/21 职场文书
爱国教育主题班会
2015/08/14 职场文书
寒假生活随笔
2015/08/15 职场文书
资产移交协议书
2016/03/24 职场文书