【力扣-字符串】4、左旋转字符串(58)

1,020 阅读1分钟

剑指 Offer 58 - II. 左旋转字符串

题目描述

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:

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

示例 2:

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

思路

  • 先将前n个字符进行反转
  • 再将后面剩余的字符反转
  • 将所有的字符进行反转

代码


class Solution
{
public:
    string reverseLeftWords(string s, int n)
    {

        int size = s.size();
        // 调用系统函数 reverse
        // 1、将前n个字符反转
        // 2、将剩余的字符反转
        // 3、将所有的字符进行反转
        
        // reverse(s.begin(), s.begin() + n);
        // reverse(s.begin() + n, s.end());
        // reverse(s.begin(), s.end());
        
        reverseStr(s, 0, n - 1);
        reverseStr(s, n, s.size() - 1);
        reverseStr(s, 0, s.size() - 1);
        return s;
    }

    // 自定义函数
    void reverseStr(string &s, int start, int end)
    {
        while (start < end)
        {
            char tmp = s[start];
            s[start] = s[end];
            s[end] = tmp;
            start++;
            end--;
        }
    }
};