IOS 算法(基礎篇) ----- 左旋轉字符串

今天看到一道簡單的算法題

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

例子

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

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

解題思路

這道算法題相對簡單
因為已經(jīng)給定限制 對于數(shù)字k, 數(shù)組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): 返回一個子序列,該子序列包含除給定數(shù)量的初始元素外的所有元素。超過返回空數(shù)組
例如: let array = [1, 2, 3, 4]
print(array.dropFirst())//輸出[2,3,4]
print(array.dropFirst(2))//輸出[3,4]
針對于數(shù)字數(shù)組時間復雜度 O(1)

prefix(n): 從集合的初始元素開始, 返回一個子序列,最大長度為指定的最大長度。超過返回所有元素
例如: let array = [1, 2, 3, 4]
print(array.prefix(2))//輸出[1,2]
print(array.prefix(10))//輸出[1,2,3,4]
針對于數(shù)字數(shù)組時間復雜度 O(1)

這樣我們一行代碼就可以寫出

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

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

題目來源:力扣(LeetCode) 感謝力扣爸爸 :)

IOS 算法合集地址

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容