跳至主要內容

05-替换空格

daipeng大约 1 分钟

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

最容易想到的方法是遍历字符串,遇到一个空格则进行替换,同时需要将后面的字符依次后移,这样操作时间复杂度也是最高的,O(n^2)。 一个空格需要被%20代替,如果得知了空格的数量,那么增加的长度也是确定的了。 我们可以先遍历一遍,获取空格数量,然后对字符数组扩容,从后往前遍历字符,遇到空格则替换为%20。

在进行合并操作时,如果从前往后合并移动元素过多,不如试试从后往前。

public String replaceSpace(String s) {
        if (s == null || s.length() == 0) {
            return s;
        }
        char[] chs = s.toCharArray();
        int spaceCount = 0;
        for (char ch : chs) {
            if (ch == ' ') {
                spaceCount++;
            }
        }
        int length = chs.length + spaceCount * 2; //计算出最终需要多大长度的数组,一个空格会被3个字符替换,增加的长度即空格个数*2
        char[] result = new char[length];
        for (int i = 0,j = 0; i < chs.length; i++) {
            char ch = chs[i];
            if (ch == ' ') {
                result[j++] = '%';
                result[j++] = '2';
                result[j++] = '0';
            } else {
                result[j++] = chs[i];
            }
        }
        return String.valueOf(result);
    }