剑指offer——左旋转字符串(java实现,完整代码)

题目:把一个字符串前面的若干个字符转移到字符串的尾部。

举个例子吧:输入字符串"abcdefg"

                      输出字符串"cdefgab"

       这个题目和我在上一篇博客——翻转字符串,思路上是有关联的,都是通过翻转的方法,来得到需要的输出结果。

在这个题目中,翻转的条件和时机比较巧妙。

       让我们先来观察一下吧——

那现在就可以按照这个思路来完成代码了——

java代码实现:(代码中会对一些函数或语句的功能进行注释)

package com.zyc.Q58_2;

/**
 * Create with IntelliJ IDEA
 * Author: zhouyichen
 * Date:{2018/9/5}
 * Time:{20:51}
 */
public class Method1 {
    //函数Reverse的功能:翻转一段字符串
    public void Reverse(char[] chars,int start,int end)
    {
        if(chars==null||chars.length<0||start<0||end>chars.length||start>end)
        {
            return;
        }
        while (start<end)
        {
            //首尾一一交换
            char temp=chars[start];
            chars[start]=chars[end];
            chars[end]=temp;

            start++;
            end--;
        }
    }

    //函数LeftRotateString的功能:并且控制翻转的范围(一共是三次翻转),每次分别调动Reverse函数;
    public String LeftRotateString(String string,int n)
    {
        char[] data=string.toCharArray();
        if(data!=null)
        {
            int total_lenght=data.length;
            if(total_lenght>0&&n>0&&n<total_lenght)
            {
                //字符串前面的n个字符的首尾下标
                int firstStart=0;
                int firstEnd=n-1;

                //字符串的后面部分字符的首尾下标
                int secondStart=n;
                int secondEnd=total_lenght-1;

                //翻转字符串的前面n个字符
                Reverse(data,0,n-1);
                //翻转字符串的后面部分字符
                Reverse(data,n,total_lenght-1);
                //翻转整个字符串
                Reverse(data,0,total_lenght-1);

            }
        }
        //data是一个字符数组,在返回的时候要注意先转换成String类型的
        return new String(data);

    }

    //主函数
    public static void main(String[] args) {
        String string="abcdefg";
        System.out.println(new Method1().LeftRotateString(string,2));
    }
}

控制台输出:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值