剑指offer--替换空格

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

简易版:

public class Solution {

    public String replaceSpace(StringBuffer str) {

        for(int k=0; k

              {

              char index = str.charAt(k);

                  if(index == ' ')

                    {

                      str.replace(k, k+1, "%20");

                    }

              }

        return str.toString();

    }

时间复杂度为O(n)版:

思路:(1)先统计空格数n,计算出新的数组的长度original + 2n;

           (2)指针P1指向original,指针P2指向original + 2n;

            (3)P1逆向查找空格,没有空格就将P1所指元素复制到P2,P1找到空格就将%20三个字符填充到P2位置,每次复制或者填充一次,指针都要减一;

            (4)如果P1==P2,循环结束

// 计算字符串中包含的空格个数

    public int getBlankNum(String str){

        int count = 0;

        for(int i = 0; i

            String tempStr = String.valueOf(str.charAt(i));

            if(tempStr.equals(" "))

                count ++;

        }

        return count;

    }

    public String replaceSpace(String str){

        if(str == null || str.length() <=0){

            return null;

        }

        int length = str.length();

        int newLength = length + getBlankNum(str)*2;

        char[] tempArray = new char[newLength];

        System.arraycopy(str.toCharArray(),0,tempArray, 0,str.toCharArray().length);

        int indexOfOriginal = length -1;

        int indexOfNew = newLength -1;

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

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

                tempArray[indexOfNew--] = '0';

                tempArray[indexOfNew--] = '2';

                tempArray[indexOfNew--] = '%';

            }else{

                tempArray[indexOfNew--] = tempArray[indexOfOriginal];

            }

            indexOfOriginal--;

        }

        return Arrays.toString(tempArray);

    }

你可能感兴趣的:(剑指offer--替换空格)