左旋转字符串(Java)-循环Index方式

Posted 北鼻coder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了左旋转字符串(Java)-循环Index方式相关的知识,希望对你有一定的参考价值。

左旋转字符串(Java)-循环Index方式

题目要求

​ 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

我的思考

​ 我们通过观察发现,左移几位,就是开始从哪位输出,但是输出的长度还是字符串本身的长度,也就是说,左移3位,那么就是从原始字符串的index=3处开始输出,输出的个数仍然是字符串长度的个数,这样肯定就越界了,所以,我们在取index的时候用index = index % str.length;让其在超出了字符串长度就返回到最前边取值。就循环起来了、

我的代码

package jianzhioffer;

/**
 * @author jiyongjia
 * @create 2020/6/25 - 14:43
 * @descp:  左旋字符串
 *  汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。
 *  对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。
 *  例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
 */
public class P13_LeftRotateString {

    public static void main(String[] args) {
        String str = "abcdefg";
        String string = LeftRotateString(str, 2);
        System.out.println(string);
    }

    public static String LeftRotateString(String str,int n) {
        int length = str.length();
        StringBuilder builder = new StringBuilder();

        while(length>0){
            builder.append(str.charAt(n++%str.length()));
            //减1
            length--;
        }

        return builder.toString();
    }
}

测试输出

输入:"abcdefg" ,左移2位

输出:

image-20200625145525842

以上是关于左旋转字符串(Java)-循环Index方式的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer——左旋转字符串

剑指offer四十三之左旋转字符串

将数组向右而不是向左旋转

循环左移操作 (左旋转字符串)

最强解析面试题:左旋转字符串

最强解析面试题:左旋转字符串