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

逆序字符串(一)

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

    题意:

    给定一个字符串,如"Pig like tianhao",我们将它转化为"tianhao like Pig"

    解法:

    我们先将整个字符串逆序,然后找到两个变量,从左向右遍历,设置这两个变量为l和r,


    图片.png

    如此图所示,所以我们现在在遍历的过程中要分别设置l和r的值,然后根据条件可以知道当是第一个值或者前一个值时空格是,l就会指向这个位置;
    同样的当这个是最后一个值,或者这个值的后面的位置是空格,r就指向这个位置.这样十分容易实现,

    int r=-1;
    int l=-1;
    for(int i=0;i<arr.length;i++)
    {
           if(chas[i]!=' ')
           {
                  l=i==0||chas[i-1]==' '?i:l
                  r=i==arr.lenght-1||chas[i+1]==' '?i:r;
           }
    }
    

    通过上述的代码,就可以获取一次的需要翻转的代码,这时候我们要考虑怎么样才能够重用这样的代码
    我们看如下的代码

    这样我们就能够在一次的循环中,就完成题意了
    ///.....在for循环中
    //执行完上述的代码
    if(l!=-1&&r!=-1)
    {
         rototeStr(chas,l,r);
         l=-1;
         r=-1;
    }
    

    完整代码如下:

    public static void f(String str)
        {
            if(str==null||str.length()==0)
            {
                return ;
            }
            char[] chas=str.toCharArray();
            rotote(chas,0,chas.length-1);
            //System.out.println(Arrays.toString(chas));
            int l=-1;
            int r=-1;
            for(int i=0;i<chas.length;i++)
            {
                if(chas[i]!=' ')
                {
                    l=i==0||chas[i-1]==' '?i:l;
                    r=i==chas.length-1||chas[i+1]==' '?i:r;
                }
                if(r!=-1&&l!=-1)
                {
                    rotote(chas,l,r);
                    r=-1;
                    l=-1;
                }
            }
            System.out.println(String.valueOf(chas));
        
        }
        
        public static void rotote(char[] chs,int left,int right)
        {
            while(left<right)
            {
                char tmp=chs[left];
                chs[left]=chs[right];
                chs[right]=tmp;
                left++;
                right--;
            }
        }
    

    相关文章

      网友评论

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

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