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使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
Python使用Scrapy爬取妹子图
May 28 Python
Python通过命令开启http.server服务器的方法
Nov 04 Python
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
Django 视图层(view)的使用
Nov 09 Python
基于Python的PIL库学习详解
May 10 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
python 命令行传入参数实现解析
Aug 30 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 Python
Python数据分析入门之教你怎么搭建环境
May 13 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原创论坛
2006/10/09 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
JavaScript 异步调用框架 (Part 1 - 问题 &amp; 场景)
2009/08/03 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
javaScript语法总结
2016/11/25 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
神经网络理论基础及Python实现详解
2017/12/15 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
Python PIL库图片灰化处理
2020/04/07 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
Python使用xpath实现图片爬取
2020/09/16 Python
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
计算机专业推荐信范文
2013/11/27 职场文书
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
创先争优承诺书范文
2014/03/31 职场文书
小学生操行评语
2014/04/22 职场文书
高三语文复习计划
2015/01/19 职场文书
检讨书怎么写
2015/01/23 职场文书
导游词书写之黄山
2019/08/06 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL
Mysql 设置boolean类型的操作
2021/06/04 MySQL
公历12个月名称的由来
2022/04/12 杂记