数据结构与算法分析笔记与总结(java实现)--字符串8:字符串移位练习题

题目:对于一个字符串,请设计一个算法,将字符串的长度为len的前缀平移到字符串的最后。

给定一个字符串A和它的长度,同时给定len,请返回平移后的字符串。

测试样例:"ABCDE",5,3返回:"DEABC"

思路:与String2左旋字符串近似。先对len取模避免len越界(常识:模数不能是0),方法一:拼接成为str=str+str的大字符串从len位置开始取出length的字符串即可。方法二:将前面l长度为len的字符串和后面的部分字符串看作是两个句子,于是使用2次反转可以解决问题,先对2个单词内部进行反转,再对整个句子进行反转。例如要对abcdefg的len=2即前面2个字符进行反转,于是先反转得到bagfedc,再对整个句子进行反转得到cdefgab.由于len是明确的,因此比反转句子还要简单。注意,这里最好先对子字符串进行反转再对整个句子进行反转,否则反转范围容易出错。

importjava.util.*;

//使用2次反转实现左旋转

publicclass Translation {

    public String stringTranslation(String A,int n, int len) {

        //特殊输入

        if(A==null||A.length()<=0) return A;

       

        //取模,避免len溢出,常识:模数不能是0

        len=len%(A.length());

       

        //将字符串转化为字符数组进行操作

        char[] array=A.toCharArray();

       

        //先对2个子字符串进行内部的反转

        this.reverse(array,0,len-1);

        this.reverse(array,len,A.length()-1);

       

        //对整个字符串进行反转

        this.reverse(array,0,A.length()-1);

       

        //返回结果,注意结果是字符串

        return String.valueOf(array);

    }

   

    //该方法用于对数组array中从[beginIndex开始到endIndex]范围的字符串进行反转

    public void reverse(char[] array,int beginIndex,int endIndex){

        while(beginIndex<endIndex){

            char temp=array[endIndex];

            array[endIndex--]=array[beginIndex];

            array[beginIndex++]=temp;

        }

    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值