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

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

示例 1:

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

示例 2:

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

限制:

  • 1 <= k < s.length <= 10000

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Solution 1

利用StringBuilder作为buffer

class Solution {
    public String reverseLeftWords(String s, int n) {
        StringBuilder buffer = new StringBuilder();
        n = n % s.length();
        if (n < 0)
            n += s.length();
        buffer.append(s.substring(n, s.length()));
        buffer.append(s.substring(0, n));
        return buffer.toString();
    }
}

Solution 2

cpp

#include <string>

class Solution
{
public:
    string reverseLeftWords(string s, int n)
    {
        if (s.length() <= 1)
            return s;
        n = n % s.length();
        for (size_t i = 0; i < n; i++)
        {
            s.push_back(s[i]);
        }
        s = s.substr(n, s.length());
        return s;
    }
};