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 16 Python
python二维列表一维列表的互相转换实例
Jul 02 Python
python匹配两个短语之间的字符实例
Dec 25 Python
python 输出所有大小写字母的方法
Jan 02 Python
Python代码实现删除一个list里面重复元素的方法
Apr 02 Python
python读取Kafka实例
Dec 23 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
浅析Python 序列化与反序列化
Aug 05 Python
python使用建议与技巧分享(一)
Aug 17 Python
python+openCV对视频进行截取的实现
Nov 27 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
Nov 28 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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模板引擎SMARTY
2006/10/09 PHP
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
javascript中clone对象详解
2014/12/03 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
详解微信小程序审核不通过的解决方法
2018/01/17 Javascript
Vue中props的详解
2019/05/16 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
python编码总结(编码类型、格式、转码)
2016/07/01 Python
python:socket传输大文件示例
2017/01/18 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
2013英文求职信模板范文
2013/11/15 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
征婚广告词
2014/03/17 职场文书
学习经验交流会主持词
2014/04/01 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
大学生自我评价范文
2015/03/03 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang