剑指 Offer 05. 替换空格

193 阅读1分钟

leetcode.cn/problems/ti…

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

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

解法1:

用字符数组,新建一个长度为字符串长度3倍的字符数组,遍历原字符串,当遍历到字符是空格时,在新数组将当前字符设置为'%',下一个字符为'2',在下一个为'0',否则当前字符直接设置到新数组,最后用字符数组新建一个字符串。

    public String replaceSpace(String s) {
        char[] chars = new char[s.length() * 3];
        int size = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == ' ') {
                chars[size] = '%';
                chars[size+1] = '2';
                chars[size+2] = '0';
                size += 3;
            } else {
                chars[size] = s.charAt(i); 
                size++;
            }
        }

        String str = new String(chars, 0 ,size);
        return str;
    }
}

常见错误

    public String replaceSpace(String s) {
        char[] chars = new char[s.length() * 3];
        int size = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == ' ') {
                chars[i] = '%';
                chars[i+1] = '2';
                chars[i+2] = '0';
                size += 3;
            } else {
                chars[i] = s.charAt(i); 
                size++;
            }
        }

        String str = new String(chars, 0 ,size);
        return str;
    }
}

错误的将i作为新数组的下标,将i,i+1,i+2设置完之后,下次遍历时,又将i+1,i+2覆盖为下一个字符,应该新建一个size作为新数组的下标。

错误输出:

输入
"We are happy."

输出
"We%are%happy.\u0000\u0000\u0000\u0000"\

预期结果
"We%20are%20happy."