IOS 算法(基础篇) ----- 左旋转字符串

今天看到一道简单的算法题

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部
例如: s = "asdfghj" n = 2 返回: dfghjas
并且限制 1 <= n < s.length <= 10000

例子

输入: s = "abcdefg", k = 2
返回: "cdefgab"

输入: s = "lrloseumgh", k = 6
返回: "umghlrlose"

解题思路

这道算法题相对简单
因为已经给定限制 对于数字k, 数组s 有
1 <= k < s.length <= 10000
这个限制条件至少能帮我们剩下1行代码 :)

方法1:

字符串剪切, 再拼接
swift 有个比较简洁方法 [startIndex..<endIndex]
我们利用这个方法来处理这题

简洁高效2行代码处理

    func reverseLeftWords(_ s: String, _ n: Int) -> String {
        let mid = s.index(s.startIndex, offsetBy: n)
        return String(s[mid..<s.endIndex] + s[s.startIndex..<mid])
    }

这种方法时间复杂度, 空间复杂度 都很小

方法2:

也是字符串剪切, 再拼接
这里我们用到swift 更简洁的两个方法
dropFirst、prefix

dropFirst(n): 返回一个子序列,该子序列包含除给定数量的初始元素外的所有元素。超过返回空数组
例如: let array = [1, 2, 3, 4]
print(array.dropFirst())//输出[2,3,4]
print(array.dropFirst(2))//输出[3,4]
针对于数字数组时间复杂度 O(1)

prefix(n): 从集合的初始元素开始, 返回一个子序列,最大长度为指定的最大长度。超过返回所有元素
例如: let array = [1, 2, 3, 4]
print(array.prefix(2))//输出[1,2]
print(array.prefix(10))//输出[1,2,3,4]
针对于数字数组时间复杂度 O(1)

这样我们一行代码就可以写出

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

        return String(s.dropFirst(n)) + String(s.prefix(n))
    
    }

题目来源:力扣(LeetCode) 感谢力扣爸爸 :)

IOS 算法合集地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容