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

2020-07-09  本文已影响0人  ShawnAlex

今天看到一道简单的算法题
如果你想问知道什么题? 既然你诚心诚意的发问了, 我就大发慈悲的告诉你!

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

这道算法题相对简单
因为已经给定限制 对于数字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 算法合集地址

上一篇下一篇

猜你喜欢

热点阅读