剑指Offer-字符串-(4)

知识点/数据结构:字符串

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

思路:方法1

最直接的办法

public class Solution {
    public String LeftRotateString(String str,int n) {
        //如果字符串长度为0,返回一个空的字符串。
        if(str.length()==0){
            return "";
        }
        // int len=str.length();
        // n=n%str.length();
        //str=str+str;  
        //return str.substring(n,len+n);
        
        //利用StringBuilder类实例化对象;直接对string进行操作会占用大量的内存。
        //sb1->需要操作的原始字符串
        //sb2->移动的字符串部分
        //sb3->不移动的字符串部分(也可能会是移动了整个字符串的整数倍)
        StringBuffer sb1=new StringBuffer(str);
        StringBuffer sb2=new StringBuffer();
        StringBuffer sb3=new StringBuffer();
        //确定实际需要一定多少,因为演1/2圈和3/2是一样的效果。
        int x= n%str.length();
        //把移动部分放到sb2中
        for(int i=0;i<x;i++){
            sb2.append(sb1.charAt(i));
        }
        //把不移动的部分放到sb3中
        for(int j=0;j<str.length()-x;j++){
            sb3.append(sb1.charAt(x+j));
       }
        //因为是循环左移:把不移动放在左侧,移动放在右侧;返回
        return sb3.append(sb2).toString();
       
     

    }
}

思路:方法2

在这里插入图片描述

public class Solution {
    public String LeftRotateString(String str,int n) {
        //如果字符串长度为0,返回一个空的字符串。
        if(str.length()==0){
            return "";
        }
        
       String s=str+str;
        String result = s.substring(n,str.length()+n);
        return result;
     

    }
}

猜你喜欢

转载自blog.csdn.net/qq_35649064/article/details/84874975