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通过yield实现数组全排列的方法
Mar 18 Python
python实现域名系统(DNS)正向查询的方法
Apr 19 Python
python字符串,数值计算
Oct 05 Python
Python实现查找匹配项作处理后再替换回去的方法
Jun 10 Python
Python中动态检测编码chardet的使用教程
Jul 06 Python
python顺序的读取文件夹下名称有序的文件方法
Jul 11 Python
python实现爬山算法的思路详解
Apr 09 Python
selenium+python环境配置教程详解
May 28 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
tensorboard显示空白的解决
Feb 15 Python
Python如何实现FTP功能
May 28 Python
python:HDF和CSV存储优劣对比分析
Jun 08 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判断所处服务器操作系统的类型
2013/06/20 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
vue-router传递参数的几种方式实例详解
2018/11/13 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
Python中有趣在__call__函数
2015/06/21 Python
Python编程实现的简单Web服务器示例
2017/06/22 Python
python实现简易动态时钟
2018/11/19 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
毕业生自我鉴定实例
2014/01/21 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
考核评语大全
2014/04/29 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
见习报告的格式
2014/10/31 职场文书
2014年节能降耗工作总结
2014/12/11 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书