剑指Offer 05.替换空格

 

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

 

示例 1:

输入:s = "We are happy."
输出:"We%20are%20happy."

 

 

思路:因为String 的不可性,每一次在 res 后面添加字符,都要重新开辟空间、复制之前的值,再在末尾添加,所以效率很低,如下:

class Solution {
    public String replaceSpace(String s) {
        String res = "";
        char c;
        for(int i = 0; i < s.length(); i++){
            c = s.charAt(i);
            if(c != ' ') res += c;
            else res += "%20";
        }
        return res;
    }
}

 

 

 改进:利用 StringBuffer / StringBuilder 的特性,底层会申请一个默认 16 字节的空间,当空间不够的时候,再申请 2 倍 + 2 的空间,不用添加的时候,每一次都去申请空间,所以,效率就高很多。

class Solution {
    public String replaceSpace(String s) {
        StringBuffer res = new StringBuffer();
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) != ' ') res.append(s.charAt(i));
            else res.append("%20");
        }
        return res.toString();
    }
}

 

posted @ 2020-09-10 20:26  星海寻梦233  阅读(112)  评论(0编辑  收藏  举报