剑指Offer:替换空格

Posted 小布丁value

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer:替换空格相关的知识,希望对你有一定的参考价值。

替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

方法一:开辟新数组

/*
    * 字符串替换
    * 1, 数组字符长度扩容为原来的 3 倍
    * 2.用String的方法 charAt获取到每个值,赋值给新数组
    * 3.注意维护size
    * 时间复杂度o(n)
    * 空间复杂度o(n)
    * 
    *
    * */
    public String replaceSpace(String s){
        int length =s.length();
        char[] res= new char[length*3];
        int size=0;
        for(int i=0;i<length;i++){
            char c =s.charAt(i);
            if(c==' '){
                res[size++]='%';
                res[size++]='2';
                res[size++]='0';
            }else{
                res[size++] =c;
            }
        }
        return s;
    }

/*
* 字符串替换:
* 方法二:双指针
* 代码思路:
* 1.扩容到加上%20后的大小
* 2.从后向前替换空格,不会覆盖值
* 3.i指向新长度的末尾,j执行旧长度的末尾
* 4.终止条件是i==j
* */
*

 public  String replaceSpcae(String s) {
        //扩容
        char[] arr = s.toCharArray();
        char[] arr1 = ensureCapacity(s);
        //从后往前找,不是空格,值替换  是空格,替换
        for (int i = arr.length - 1, j = arr1.length - 1; i < j; i--, j--) {
            if (arr[i] == ' '){
                arr1[j--] = '0';
            arr1[j--] = '2';
            arr1[j] = '%';
        }else{
            arr1[j] = arr[i];
        }
    }
      return  new String(arr1);
    }
    public char[] ensureCapacity(String  s){
        char [] arr=s.toCharArray();
        int count=0;
        for(int i=0;i<s.length();i++){
            if(arr[i]==' '){
                count++;
            }
        }
        char[] res=Arrays.copyOf(arr,arr.length+count*2);
        return  res;
    }

以上是关于剑指Offer:替换空格的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer字符串面试题 替换空格

剑指offer 2.替换空格

剑指OFFER替换空格

替换空格-剑指Offer

[剑指offer] 替换空格

《剑指Offer》之替换空格