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

示例 1:

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

示例 2:

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

限制:

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

思路

StringBuffer

class Solution {
    public String reverseLeftWords(String s, int n) {
        String head = s.substring(0, n);
        String tail = s.substring(n);
        StringBuffer result = new StringBuffer();
        result.append(tail);
        result.append(head);
        return result.toString();
    }
}

字符串拼接

return s.substring(n, s.length()) + s.substring(0, n);

三次反转

  1. 反转前n个字符 ba cdefg
  2. 反转n个以后的字符 ba gfedc
  3. 反转整个字符串 cdefgab

    class Solution {
     public String reverseLeftWords(String s, int n) {
         int len = s.length();
         StringBuilder result = new StringBuilder(s);
         reverseString(result, 0, n - 1); // 反转前n个字符
         reverseString(result, n, len - 1); // 反转n个以后的字符
         reverseString(result, 0, len - 1); // 反转整个字符串
    
         return result.toString();
     }
    
     public void reverseString(StringBuilder s, int start, int end) {
         // 两指针指向头尾,交换两元素
         while (start < end) {
             char t = s.charAt(start);
             s.setCharAt(start, s.charAt(end));
             s.setCharAt(end, t);
             start++;
             end--;
         }
     }
    }