剑指Offer43:左旋转字符串(Java)

参考牛客“jianghan0712”的解答:https://www.nowcoder.com/questionTerminal/12d959b108cb42b1ab72cef4d36af5ec?f=discussion

思路分析:

反复利用字符串翻转
向左循环移动可以分作三次翻转得到。假设向左循环移动N个,字符串左边N个字符设为X,剩余部分设为Y,题目是想实现XY变成YX.
实现步骤分为三步:

  1. X翻转
  2. Y翻转
  3. XY翻转

字符数组转成字符串是不能像Int型那样使用.toString()转成字符串的。需要一个个遍历,或者使用StringUtils的join方法。参考:https://www.cnblogs.com/ooo0/p/9169311.html
“笑叹词穷”的字符翻转总结:https://www.cnblogs.com/binye-typing/p/9260994.html

题目描述:

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

Java代码:

public class Solution {
    public String LeftRotateString(String str,int n) {
        if(str.length()==0||n==0){//n为0,返回原字符串
            return str;
        }
        char [] res=str.toCharArray();
        Reverse(res,0,n-1);
        Reverse(res,n,str.length()-1);
        Reverse(res,0,str.length()-1);
        String result ="";
        for(int i=0;i<str.length();i++){//数组转字符串
            result +=res[i];
        }
        return result;
    }
    public static void Reverse(char[]arr,int i,int j){
        while(i<=j){
            char temp=arr [j];
            arr [j--]=arr [i];
            arr [i++]=temp;
            
        }
    }
}
原文地址:https://www.cnblogs.com/dongmm031/p/12252165.html