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 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
Python 专题四 文件基础知识
Mar 20 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
Python实现的简单模板引擎功能示例
Sep 02 Python
基于并发服务器几种实现方法(总结)
Dec 29 Python
Python多线程threading模块用法实例分析
May 22 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
python RC4加密操作示例【测试可用】
Sep 26 Python
推荐技术人员一款Python开源库(造数据神器)
Jul 08 Python
手残删除python之后的补救方法
Jun 26 Python
详解MindSpore自定义模型损失函数
Jun 30 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中explode函数用法分析
2014/11/15 PHP
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
jquery map方法使用示例
2014/04/23 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
Vuex的actions属性的具体使用
2019/04/14 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
Python常用随机数与随机字符串方法实例
2015/04/09 Python
python实现自动更换ip的方法
2015/05/05 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
详解python metaclass(元类)
2020/08/13 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
史上最全面的Java面试题汇总!
2015/02/03 面试题
酒店执行总经理岗位职责
2013/12/15 职场文书
学校读书活动总结
2014/06/30 职场文书
2015年党性分析材料
2014/12/19 职场文书
公司车辆管理制度
2015/08/04 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书