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统计文件行数示例分享
Feb 21 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
python+opencv识别图片中的圆形
Mar 25 Python
用Python写一段用户登录的程序代码
Apr 22 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
May 24 Python
Django中间件实现拦截器的方法
Jun 01 Python
解决DataFrame排序sort的问题
Jun 07 Python
python Selenium实现付费音乐批量下载的实现方法
Jan 24 Python
windows下numpy下载与安装图文教程
Apr 02 Python
Python的缺点和劣势分析
Nov 19 Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 Python
Python Selenium自动化获取页面信息的方法
Aug 31 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/11/18 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
PHP钩子实现方法解析
2019/05/21 PHP
js AspxButton的客户端操作
2009/06/26 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
基于keras中的回调函数用法说明
2020/06/17 Python
python redis存入字典序列化存储教程
2020/07/16 Python
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
2019年c语言经典面试题目
2016/08/17 面试题
化学相关工作求职信
2013/10/02 职场文书
前台文员岗位职责及工作流程
2013/11/19 职场文书
超市开店计划书
2014/09/15 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
MongoDB 常用的crud操作语句
2021/06/20 MongoDB
python分分钟绘制精美地图海报
2022/02/15 Python