Java 左旋转字符串详解

左旋转字符串

题目描述

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。

请定义一个函数实现字符串左旋转操作的功能。

比如输入字符串 "abcdefg" 和数字 2,该函数将返回左旋转 2 位得到的结果 "cdefgab"

注意:

样例

输入:"abcdefg" , n=2

输出:"cdefgab"

解法

先翻转前 n 个字符,再翻转后面的字符,最后整体翻转。

/**
 * @author bingo
 * @since 2018/12/12
 */

class Solution {

    /**
     * 左旋转字符串
     * 
     * @param str 字符串
     * @param n 左旋的位数
     * @return 旋转后的字符串
     */
    public String leftRotateString(String str, int n) {
        if (str == null || n < 1 || n > str.length()) {
            return str;
        }
        char[] chars = str.toCharArray();
        int len = chars.length;
        reverse(chars, 0, n - 1);
        reverse(chars, n, len - 1);
        reverse(chars, 0, len - 1);
        return new String(chars);
    }

    private void reverse(char[] chars, int p, int q) {
        while (p < q) {
            swap(chars, p++, q--);
        }
    }

    private void swap(char[] chars, int p, int q) {
        char t = chars[p];
        chars[p] = chars[q];
        chars[q] = t;
    }
}

测试用例

  1. 功能测试(把长度为 n 的字符串左旋转 0/1/2/n-1/n/n+1 个字符);
  2. 特殊输入测试(字符串指针为空指针)。

教程来源于Github,感谢apachecn大佬的无私奉献,致敬!

技术教程推荐

成为AI产品经理 -〔刘海丰〕

手把手教你玩音乐 -〔邓柯〕

基于人因的用户体验设计课 -〔刘石〕

性能优化高手课 -〔尉刚强〕

手把手带你搭建秒杀系统 -〔佘志东〕

eBPF核心技术与实战 -〔倪朋飞〕

李智慧 · 高并发架构实战课 -〔李智慧〕

Dubbo源码剖析与实战 -〔何辉〕

B端体验设计入门课 -〔林远宏(汤圆)〕