Swift 数据结构与算法(43) + Leetcode剑指 Offer 58 - II. 左旋转字符串

50 阅读2分钟

Swift 数据结构与算法( ) + Leetcode 掘金 #日新计划更文活动

题目

剑指 Offer 58 - II. 左旋转字符串

思路 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

 

示例 1:

输入: s = "abcdefg", k = 2
输出: "cdefgab"

示例 2:

输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"

 

限制:

  • 1 <= k < s.length <= 10000

解题思路🙋🏻‍ ♀️

转存失败,建议直接上传图片文件

截屏2023-08-18 23.54.06.png 如上所示

边界思考🤔

代码

**class** Solution {

    **func** reverseLeftWords(_ s: String, _ k: Int) -> String {

        // 截取字符串 s 从索引 k 到末尾的部分

        **let** firstPart = s[s.index(s.startIndex, offsetBy: k)...]

        

        // 截取字符串 s 从开始到索引 k 之前的部分

        **let** secondPart = s[..<s.index(s.startIndex, offsetBy: k)]

        // 将两部分合并并返回

        **return** String(firstPart + secondPart)

    }![]()

}

时空复杂度分析

错误与反思

概念

使用场景与应用

1. 需要学习的概念

实际场景及技术点:

  • 数据加密与解密: 当我们想通过简单的方式对数据进行加密或混淆时,可以使用类似的旋转技术。

    • 技术点:字符串操作,子串提取,位置交换。
  • 日志文件的循环记录: 当日志文件达到一定大小后,可以将文件的前半部分移到后半部分,使得新的日志信息可以继续写在文件的前面。

    • 技术点:文件读写,数据旋转。
  • 图像处理: 在处理图片时,可能需要对图片进行某种旋转或移位操作。

    • 技术点:像素数据的操作,子区域提取,位置交换。

在iOS app开发中的实际应用:

  • 动态切换语言: 当用户选择了一个新的语言,某些文本可能需要按照特定的规则进行调整或旋转。

    • 技术点:字符串操作,文本显示。
  • 循环滚动视图: 比如在一个新闻应用中,头条新闻可以在屏幕顶部循环滚动。

    • 技术点:视图的循环重用,数据的旋转和更新。
  • 动画效果: 在某些动画效果中,可以使用类似的技术来循环移动或旋转对象。

    • 技术点:图形渲染,动画计算。

时空复杂度:

  • 时间复杂度: 对于这个基本的解法,我们遍历了整个字符串两次,所以时间复杂度为 (O(n)),其中 (n) 是字符串的长度。

  • 空间复杂度: 我们使用了一个额外的字符串变量 result 来存储结果,其大小与输入字符串相同,因此空间复杂度也是 (O(n))。