题目链接

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

示例 1:

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

限制:

  • 0 <= s 的长度 <= 10000

思路

字符数组

定义一个3倍大小的字符数组

class Solution {
    public String replaceSpace(String s) {
        char[] before = s.toCharArray();
        int len = s.length();
        char[] chars = new char[3 * len];
        int j = 0;
        for (int i = 0; i < len; i++) {
            if(before[i] == ' ') {
                chars[j++] = '%';
                chars[j++] = '2';
                chars[j++] = '0';
            } else {
                chars[j++] = before[i];
            }
        }
        return new String(chars, 0, j);
    }
}

双指针

先扩充字符串到替换后的大小,再从后往前写入字符

class Solution {
    public String replaceSpace(String s) {
        if (s == null || s.length() == 0) {
            return s;
        }

        // 字符串中每一个空格多占2位,用两个空格占位,多余的空间都用str表示
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == ' ') {
                str.append("  ");
            }
        }

        //若是没有空格直接返回
        if (str.length() == 0) {
            return s;
        }

        //有空格情况 定义两个指针
        int left = s.length() - 1;//左指针:指向原始字符串最后一个位置
        s += str.toString(); // 扩充字符串
        int right = s.length() - 1;//右指针:指向扩展字符串的最后一个位置
        char[] chars = s.toCharArray();
        while (left >= 0) {
            if (chars[left] == ' ') {
                chars[right--] = '0';
                chars[right--] = '2';
                chars[right] = '%';
            } else {
                chars[right] = chars[left];
            }
            left--;
            right--;
        }
        return new String(chars);
    }
}