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 相关文章推荐
将Emacs打造成强大的Python代码编辑工具
Nov 20 Python
python求质数的3种方法
Sep 28 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
python实现的按要求生成手机号功能示例
Oct 08 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
Tensorflow中的降维函数tf.reduce_*使用总结
Apr 20 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
Django中F函数的使用示例代码详解
Jul 06 Python
使用Python绘制台风轨迹图的示例代码
Sep 21 Python
python内置模块之上下文管理contextlib
Jun 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
simplehtmldom Doc api帮助文档
2012/03/26 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
浅谈js的异步执行
2016/10/18 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
如何更优雅地写python代码
2019/07/02 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
提升python处理速度原理及方法实例
2019/12/25 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
顶岗实习接收函
2014/01/09 职场文书
大学运动会通讯稿
2014/01/28 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
关于保护环境的标语
2014/06/09 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
解析mybatis-plus中的resultMap简单使用
2021/11/23 Java/Android