【LeetCode-字串】左旋轉字串
阿新 • • 發佈:2020-07-27
題目描述
字串的左旋轉操作是把字串前面的若干個字元轉移到字串的尾部。請定義一個函式實現字串左旋轉操作的功能。比如,輸入字串"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)