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  连接字符串(join %)
Sep 06 Python
使用Python进行稳定可靠的文件操作详解
Dec 31 Python
Python中函数的参数传递与可变长参数介绍
Jun 30 Python
python中正则的使用指南
Dec 04 Python
python numpy 按行归一化的实例
Jan 21 Python
Python的UTC时间转换讲解
Feb 26 Python
python二维码操作:对QRCode和MyQR入门详解
Jun 24 Python
django 环境变量配置过程详解
Aug 06 Python
Python如何调用JS文件中的函数
Aug 16 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
python中shell执行知识点
May 06 Python
详解Python魔法方法之描述符类
May 26 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面向对象之多态
2014/08/20 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
jquery分页插件pagination使用教程
2018/10/23 jQuery
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
python+selenium+autoit实现文件上传功能
2017/08/23 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
Django Rest framework权限的详细用法
2019/07/25 Python
python实现在一个画布上画多个子图
2020/01/19 Python
英国床垫在线:Mattress Online
2016/12/07 全球购物
工程造价管理专业大专生求职信
2013/10/06 职场文书
工程造价自荐信
2013/10/09 职场文书
电大本科自我鉴定
2014/02/05 职场文书
购房协议书
2014/04/11 职场文书
社区健康教育工作方案
2014/06/03 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
长城导游词300字
2015/01/30 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书
python元组打包和解包过程详解
2021/08/02 Python
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers