Python学习笔记8-字符串左旋转

字符串左旋转(Left Rotation)是将字符串中的字符向左移动指定的位数,并将移出的字符添加到字符串的末尾。例如,对于字符串 "abcdefg" 和旋转数 2,左旋转后的结果是 "cdefgab"

实现方法

1. 基于切片的实现

使用字符串切片是实现左旋转的简洁方法。

def left_rotate(s, n):
    # 处理边界情况
    if not s or n <= 0:
        return s
    n = n % len(s)  # 处理旋转次数大于字符串长度的情况
    return s[n:] + s[:n]

# 使用示例
s = "abcdefg"
n = 2
print(left_rotate(s, n))  # 输出: "cdefgab"
2. 使用队列

可以使用collections.deque来实现左旋转。deque提供了高效的旋转操作。

from collections import deque

def left_rotate(s, n):
    d = deque(s)
    d.rotate(-n)  # 左旋转
    return ''.join(d)

# 使用示例
s = "abcdefg"
n = 2
print(left_rotate(s, n))  # 输出: "cdefgab"

解释

  1. 基于切片

    • s[n:]表示从第n个字符到末尾的子字符串。
    • s[:n]表示从开头到第n个字符(不包括第n个字符)的子字符串。
    • 将这两个子字符串拼接在一起即可完成左旋转。
  2. 使用deque

    • deque.rotate(-n)deque中的元素左旋转n位。负号表示向左旋转,正号表示向右旋转。
    • ''.join(d)将旋转后的deque转换回字符串。

处理边界情况

  • 当旋转位数n大于字符串长度时,使用n % len(s)确保旋转次数在合理范围内。
  • 旋转次数为0或负值时(如 n <= 0),直接返回原字符串。

时间复杂度

  • 基于切片的实现O(m),其中m是字符串的长度,因为切片和拼接操作的时间复杂度都是线性的。
  • 使用dequeO(m)deque.rotate''.join操作都是线性的。

这些方法适用于各种需要字符串旋转的场景,选择最适合的方法可以帮助提高代码的简洁性和效率。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值