1. 程式人生 > 實用技巧 >【LeetCode-字串】左旋轉字串

【LeetCode-字串】左旋轉字串

題目描述

字串的左旋轉操作是把字串前面的若干個字元轉移到字串的尾部。請定義一個函式實現字串左旋轉操作的功能。比如,輸入字串"abcdefg"和數字2,該函式將返回左旋轉兩位得到的結果"cdefgab"。
示例:

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

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

說明: 1 <= k < s.length <= 10000
題目連結: https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/

思路

方法和旋轉陣列這題是一樣的。步驟如下(假設字串長度為 n):

  • 對整個字串進行翻轉(在 [0, n-1] 範圍內進行翻轉);
  • 在 [0, n-k-1] 範圍內對字串進行翻轉;
  • 在 [n-k, n-1] 範圍內對字串進行翻轉;

程式碼如下:

class Solution {
public:
    string reverseLeftWords(string s, int k) {
        int n = s.size();
        k %= n;
        reverse(s, 0, n-1);
        reverse(s, 0, n-k-1);
        reverse(s, n-k, n-1);
        return s;
    }

    void reverse(string& s, int left, int right){
        while(left<right){
            swap(s[left], s[right]);
            left++;
            right--;
        }
    }
};
  • 時間複雜度:O(n)
  • 空間複雜度:O(1)