博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(python版)《剑指Offer》JZ43:左旋转字符串
阅读量:4090 次
发布时间:2019-05-25

本文共 1454 字,大约阅读时间需要 4 分钟。

在这里插入图片描述

【思路1】切片

class Solution1:    def reverseLeftWords(self, s, n):        return s[n:] + s[:n]
  • 时间复杂度 O(N) : 其中 N 为字符串 s 的长度,字符串切片函数为线性时间复杂度
  • 空间复杂度 O(N): 两个字符串切片的总长度为 N 。

【思路2】列表遍历拼接

class Solution:    def reverseLeftWords(self, s, n):        res = []        for i in range(n,len(s)):            res.append(s[i])        for i in range(n):            res.append(s[i])        return ''.join(res)'''作者:jyd链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/mian-shi-ti-58-ii-zuo-xuan-zhuan-zi-fu-chuan-qie-p/来源:力扣(LeetCode)'''
  • 时间复杂度 O(N) : 线性遍历 s 并添加,使用线性时间;
  • 空间复杂度 O(N): 新建的辅助 res 使用 O(N) 大小的额外空间。

【思路3】原地反转

反转法一:

  1. 反转前半部分
  2. 反转后半部分
  3. 整体反转

反转法二:

  1. 整体反转
  2. 反转前半部分
  3. 反转后半部分

法一 法二的前后是不一样的,拿具体数字试一下,形象一点

class Solution:    def reverseLeftWords(self, s, n):        if n > len(s) or not s:            return ''        s = list(s)        def reverse(start, end):            while start < end:                s[start], s[end] = s[end], s[start]                start += 1                end -= 1        length = len(s) - 1        # 法一        # reverse(0, n-1)        # reverse(n,length)        # reverse(0, length)                # 法二        reverse(0, length)        reverse(0, length-n)        reverse(length-n+1, length)        return ''.join(s)
s=[abcdefg] k=2反转法一:s[:2]=ab        前反转: bas[3:]=cdefg     后反转: gfedcs[:]=ba gfedc   整体反转: cdefg ba反转法二:s[:]=abcdefg    整体反转: gfedcbas[:7-1-2]=gfedc 前反转: cdefgs[7-2:7-1]=ba   后反转: ab

下面三个依次是三个思路的实现效果

思路一的方法竟然是最快的~
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

转载地址:http://cfjii.baihongyu.com/

你可能感兴趣的文章
数据结构与算法14-跳表
查看>>
Java并发编程 | 一不小心就死锁了,怎么办?
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
(python版)《剑指Offer》JZ06:旋转数组的最小数字
查看>>
(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面
查看>>
(python版)《剑指Offer》JZ28:数组中出现次数超过一半的数字
查看>>
(python版)《剑指Offer》JZ30:连续子数组的最大和
查看>>
(python版)《剑指Offer》JZ32:把数组排成最小的数
查看>>
(python版)《剑指Offer》JZ02:替换空格
查看>>
JSP/Servlet——MVC设计模式
查看>>
使用JSTL
查看>>
Java 8新特性:Stream API
查看>>
管理用户状态——Cookie与Session
查看>>
最受欢迎的前端框架Bootstrap 入门
查看>>
JavaScript编程简介:DOM、AJAX与Chrome调试器
查看>>
通过Maven管理项目依赖
查看>>
通过Spring Boot三分钟创建Spring Web项目
查看>>
Spring的IoC(依赖注入)原理
查看>>
Guava快速入门
查看>>
Java编程基础:static的用法
查看>>