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写入中英文字符串到文件的方法
May 06 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
python实现word 2007文档转换为pdf文件
Mar 15 Python
详解Django 中是否使用时区的区别
Jun 14 Python
Python骚操作之动态定义函数
Mar 26 Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
opencv3/C++ 平面对象识别&amp;透视变换方式
Dec 11 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
python在CMD界面读取excel所有数据的示例
Sep 28 Python
通过代码简单了解django model序列化作用
Nov 12 Python
python 视频下载神器(you-get)的具体使用
Jan 06 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
SONY SRF-40W电路分析
2021/03/02 无线电
PHP 简单日历实现代码
2009/10/28 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
JQuery替换DOM节点的方法
2015/06/11 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
2016/11/30 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
layui--select使用以及下拉框实现键盘选择的例子
2019/09/24 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
安装dbus-python的简要教程
2015/05/05 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Django重置migrations文件的方法步骤
2019/05/01 Python
python实现随机漫步方法和原理
2019/06/10 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
Python autoescape标签用法解析
2020/01/17 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
夜大自我鉴定
2013/10/31 职场文书
专科毕业生就业推荐信
2013/11/01 职场文书
股份合作协议书
2014/09/10 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang
解决golang 关于全局变量的坑
2021/05/06 Golang
Nginx进程调度问题详解
2021/09/25 Servers
oracle重置序列从0开始递增1
2022/02/28 Oracle
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android