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中使用logging模块代替print(logging简明指南)
Jul 09 Python
python中kmeans聚类实现代码
Feb 23 Python
Python异常处理操作实例详解
May 10 Python
解决DataFrame排序sort的问题
Jun 07 Python
python用列表生成式写嵌套循环的方法
Nov 08 Python
2019 Python最新面试题及答案16道题
Apr 11 Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
python函数不定长参数使用方法解析
Dec 14 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 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
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
javascript常用功能汇总
2015/07/05 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
python编写弹球游戏的实现代码
2018/03/12 Python
如何更优雅地写python代码
2019/07/02 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
python中time.ctime()实例用法
2021/02/03 Python
你正在寻找的CSS3 动画技术
2011/07/27 HTML / CSS
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
大学应届毕业生个人求职信
2013/09/23 职场文书
自荐信的禁忌和要点
2013/10/15 职场文书
高中自我鉴定
2013/12/20 职场文书
运动会领导邀请函
2014/01/10 职场文书
教学器材管理制度
2014/01/26 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
解除财产保全担保书
2014/05/20 职场文书
财务人员岗位职责
2015/02/03 职场文书
护士节慰问信
2015/02/15 职场文书
Matlab如何实现矩阵复制扩充
2021/06/02 Python
海弦WR-800F
2022/04/05 无线电
Python四款GUI图形界面库介绍
2022/06/05 Python