Java解法:(小白易懂) 时间复杂度O(n),搞定 Offer 就靠它了

话不多说,直接看代码

/**
 * @author Kongguan shaonv
 * @date 2019/9/15 15:36
 *
 */
public class Replace {
    public static String replaceSpace(StringBuffer str) {
        if (str == null || str.length() <= 0)
            return null;

        //计算空格数
        int len = str.length();
        int numberOfBlank = 0;
        for (int i = 0; i < len; i++) {
            if (str.charAt(i) == ' ')
                numberOfBlank++;
        }

        //newLength为把空格替换为%20之后的总长度
        int newLength = len + numberOfBlank * 2;
        str.setLength(newLength);   //更新字符串长度

        //设置两个指针,p1 指向原字符串的最后一个字符的位置, p2 指向把空格替换为%20之后的最后一个字符的位置
        int p1 = len - 1;
        int p2 = newLength - 1;

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

        return str.toString();
    }

    public static void main(String[] args) {
        //测试用例
        StringBuffer str = new StringBuffer("Process finished with exit code 0.");
        System.out.println(replaceSpace(str));
    }
}