美文网首页
逆序字符串(二)

逆序字符串(二)

作者: chengcongyue | 来源:发表于2019-04-10 19:58 被阅读0次

    题意

    给定字符类型的数组chas和一个整数size,把整体为size的左半区移到右半区去
    举个例子
    ABCDE size=3,这样的话结果为DEABC


    图片.png

    实现的代码如下:

        public static void f(String str,int size)
        {
            char[] chas=str.toCharArray();
            rotote(chas,0, size-1);
            rotote(chas,size,chas.length-1);
            rotote(chas,0,chas.length-1);
            System.out.println(String.valueOf(chas));
        }
    

    其中的rotote是逆序字符串(一)中的函数,实现起来非常简单

    解法2

    叙述起来较为复杂,我们通过图来描述


    图片.png

    首先我们来看看如何实现整体的交换的
    我们先来想想要传入哪些参数
    start end来限定整个子数组,size来表示整个需要交换的子数组的长度
    像 1 2 3 4 5 6 7 A B C D 需要交换的就是ABCD和1234所以size是4
    有了这些,我现在就开始来实现代码

    public static void f(char[] chas,int start,int end,int size)
    {
           int i=end-size+1;//取得A对应的位置
           while(size--!=0)//执行size次
           {
                //交换i和start位置的元素
                i++;start++;
           }
    }
    

    然后就是我们的核心函数

    public static void f(String str,int size)
        {
            if(str==null||str.length()==0)
            {
                return;
            }
            char[] chas=str.toCharArray();
            int start=0;
            int end=chas.length-1;
            int lpart=size;
            int rpart=chas.length-size;
            int s=Math.min(lpart,rpart);
            int d=lpart-rpart;
            while(true)
            {
                exchange(chas,start,end, s);
                if(d>0)
                {
                    start+=s;
                    lpart=d;
                }else if(d<0)
                {
                    end-=s;
                    rpart=-d;
                }else
                {
                    break;
                }
                s=Math.min(lpart,rpart);
                d=lpart-rpart;
            }
            System.out.println(String.valueOf(chas));
        }
    

    相关文章

      网友评论

          本文标题:逆序字符串(二)

          本文链接:https://www.haomeiwen.com/subject/dqgoiqtx.html