【LeetCode刷题】左旋转字符串


题目

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

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

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

题解

已看完题目,我就想起了之前刷过的一道旋转数组的题目,文章在这:旋转数组。在“旋转数组”中,我当时的做法是将数组进行一次全局反转,再进行两次局部反转,这道题也可以这样做,因为字符串本质上是一个数组,所以这题可以转化为“旋转数组”。

思路:

  1. 将String转为char数组,进行一次反转。
  2. 将char数组下标$0$到$str.length - n - 1$部分进行反转。
  3. 将char数组下标$str.length - n$到$str.length - 1$进行反转,最后转为String返回即可。

代码实现

class Solution {
    public void reverse(char[] arr, int start, int end) {
        int mid = start + (end-start) / 2;
        for(; start <= mid; start++, end--) {
            char t = arr[start];
            arr[start] = arr[end];
            arr[end] = t;
        }
    }
    
    public String reverseLeftWords(String s, int n) {
        if(n == 0) return s;
        
        char[] str = s.toCharArray();
        reverse(str, 0, str.length - 1);
        reverse(str, 0, str.length - n - 1);
        reverse(str, str.length - n, str.length - 1);

        return new String(str);
    }
}

声明:迟於|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 【LeetCode刷题】左旋转字符串


栖迟於一丘