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脚本和ADB命令实现卸载App
Feb 10 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
python 多个参数不为空校验方法
Feb 14 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
python里dict变成list实例方法
Jun 26 Python
Pandas透视表(pivot_table)详解
Jul 22 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
python中@property和property函数常见使用方法示例
Oct 21 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
Feb 15 Python
在Mac中配置Python虚拟环境过程解析
Jun 22 Python
Python爬取12306车次信息代码详解
Aug 12 Python
Pycharm如何自动生成头文件注释
Nov 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
360通用php防护代码(使用操作详解)
2013/06/18 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
基本DOM节点操作
2017/01/17 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
python妹子图简单爬虫实例
2015/07/07 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
行政人事经理职位说明书
2014/03/05 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书