编程之法面试和算法心得-1.1字符串的旋转

博客基于《编程之法面试和算法心得》探讨字符串旋转问题,提供了蛮力移位和三步反转两种解法,并介绍了如何利用三步反转解决单词反转问题。详细解释了每种方法的思路和Python实现,附带相关代码链接。
摘要由CSDN通过智能技术生成

本博客的创作的算法来源于July创作的《编程之法面试和算法心得》一书,特此声明。我再学习此书的同时在结合了自己的一些理解,用python实现了一遍。在后面的系列博客中,不再重述,直接进入正题。

一、题目描述

给定一个字符串,要求字符串前面若干个字符移到字符串的尾部。例如,将字符串“abcdef”的前三个字符移到字符串的尾部,则得到“defabc”。请写一个函数实现该功能。

二、解法一:蛮力移位

假设需要移位m个字符,字符串的总长度为n,则蛮力移位需要遍历该字符串m次,将m个需要移位的字符搬到该字符串的尾部。因此可以分成两个函数实现,首先第一个函数用来搬移第一个字符到该字符串的尾部。

 def LeftShiftOne(str, n):
        s = []
        s = list(str)
        t = s[0]
        for i in range(1,n):
            s[i-1] = s[i]
        s[n-1] = t
        return s

第二个函数写个for训练遍历m次即可得到移位的字符串。

def LeftRotateString(s, n, m):
    while(m):
        s = LeftShiftOne(s, n)
        m = m - 1
    return s

该算法想法和实现都简单,但是时间复杂度比较高,为:O(mn),空间复杂度为O(1).

三、解法二:三步反转

三步反转的思维比较巧妙,做法分为三步:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值