剑指offer5:替换空格

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

1.对于这种数组复制题目,主要从后往前处理。

2.Java来写最好是StringBuilder 加上reverse.toString来处理

3.2个指针,p1指针指向原数组的末尾,P2指针指向新复制的数组的末尾,当p1不为空时,p1复制到p2,同时p1--,p2--,当p1指向为空时,在p2连续填入需要的值,同时,p2递减相应的次数,p1--.

package com.hnist.lzn.jinazhioffer;

public class TIhuanBlock {

    char[] RepalceBlank(char[] string,int length){

            if(string==null||length<=0){

                return null;
            }

            int originLength=0;
            int numberOfBlank = 0;
            int i = 0;
            //Java数组最后一个不是'\0'
            while(i<length){

                //扫描大小
                ++originLength;
                if(string[i]==' '){

                    ++numberOfBlank;
                }

                ++i;

            }
            //为啥是*2
            int newLength = originLength+numberOfBlank*3;
            //以及为啥是>
            if(newLength<length)
                return null;

            //new数目够的情况
            char[] strings = new char[newLength];

            //防止越界
            int indexOfOriginal = originLength-1;
            int indexOfNew = newLength-1;

            while(indexOfOriginal>=0&&indexOfNew>indexOfOriginal){

                if(string[indexOfOriginal]==' '){

                    strings[indexOfNew--]='0';
                    strings[indexOfNew--]='2';
                    strings[indexOfNew--]='%';

                }else{

                    strings[indexOfNew--] = string[indexOfOriginal];
                }

                --indexOfOriginal;

            }

           return strings;

    }

    public static void main(String[] args) {

            String nums = "we are happy";

            char[] string = nums.toCharArray();

           char[] strings =  new TIhuanBlock().RepalceBlank(string,string.length);

            for(int i=0;i<strings.length;i++){

                System.out.print(strings[i]);
            }

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_39137699/article/details/89320498