IOS 算法(基础篇) ----- 左旋转字符串
今天看到一道简单的算法题
如果你想问知道什么题? 既然你诚心诚意的发问了, 我就大发慈悲的告诉你!
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部
例如: 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) 感谢力扣爸爸 :)