题目

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。   示例 1: 输入: s = "abcdefg", k = 2 输出: "cdefgab"   示例 2: 输入: s = "lrloseumgh", k = 6 输出: "umghlrlose"   限制: 1 <= k < s.length <= 10000

思路

没说可不可以借助辅助空间,但是如果为了高要求,就是让空间复杂度为O(1),不借助辅助空间,只在字符串基础上做这道题。 步骤: 1、反转字符串前n个字符 2、反转字符串,前n个字符以外的字符 3、反转整体字符串就能达到题设目的

class Solution {
    public String reverseLeftWords(String s, int n) {
        /**1、先对前n个字符串反转
           2、再对n-1到末尾的字符串反转
           3、整体反转
           4、空间复杂度为O(1), 不借助另外的辅助空间
         */
        int len = s.length();
        StringBuilder sb = new StringBuilder(s);
        reverseString(sb, 0, n-1);
        reverseString(sb, n, len-1);
        return sb.reverse().toString();
    }

    public void reverseString(StringBuilder sb, int start, int end){
        while(start < end){
            char temp = sb.charAt(start);
            sb.setCharAt(start, sb.charAt(end));
            sb.setCharAt(end,temp);
            start++;
            end--;
        }
    }
}