题目描述

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

思路

1.我们可以发现空格和要被替换的字符串长度相差2,所以我们可以对原数据进行一次扫描,若发现空格就将给字符串新增两个空格填充,为下一步替换做准备。
2.然后我们从原字符串的末尾开始扫描,若不是空格直接落到新字符串的尾部,若是空格,则直接将%20以倒叙的形式覆盖。

Java代码实现

public class Solution {
   public String replaceSpace(StringBuffer str) {
        //保存原有字符串的长度
        int p1 = str.length()-1;

        //找到一个空格就给str新增两个空格
        for(int i=0;i<=p1;i++){
            if(str.charAt(i) == ' '){
                str.append("  ");
            }
        }

        //记录字符串替换后的总长度
        int p2 = str.length()-1;

        while(p1 >= 0 && p2 >= 0){
            char c = str.charAt(p1--);
            if(c == ' '){
                str.setCharAt(p2--,'0');
                str.setCharAt(p2--,'2');
                str.setCharAt(p2--,'%');
            }else{
                str.setCharAt(p2--,c);
            }
        }
        return str.toString();
    }
}