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之py2exe打包工具详解
Jun 14 Python
Python 异常处理的实例详解
Sep 11 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
Jun 14 Python
浅谈dataframe中更改列属性的方法
Jul 10 Python
Django 创建/删除用户的示例代码
Jul 24 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
python实现tail实时查看服务器日志示例
Dec 24 Python
详解Pycharm出现out of memory的终极解决方法
Mar 03 Python
Python如何转换字符串大小写
Jun 04 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 Python
python实现进度条的多种实现
Apr 29 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 Smarty生成EXCEL文档的代码
2008/08/23 PHP
解析php多线程下载远程多个文件
2013/06/25 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
PHP微信红包API接口
2015/12/05 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
jQuery中:last选择器用法实例
2014/12/30 Javascript
使用js画图之饼图
2015/01/12 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
python开启debug模式的方法
2019/06/27 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
Python流程控制常用工具详解
2020/02/24 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
详解HTML5布局和HTML5标签
2020/10/26 HTML / CSS
高三毕业典礼演讲稿
2014/05/13 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS