替换空格

Wu Jun 2020-01-14 21:30:11
01 数据结构与算法 > 算法题 > 字符串

题目出处

替换空格

1 题目描述

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

Input:
"A B"

Output:
"A%20B"

2 解题思路

有在原字符串上替换,和创建新字符串两种操作。

思路一:O(n2) 的解法

从前往后插入。这样移动的次数多,不建议

思路二:O(n) 的解法

从后往前插入。先统计出字符串中空格总数,计算出替换之后字符串的总长度,从后向前移动。

public class Solution {
    public String replaceSpace(StringBuffer str) {
        if(null == str){
            return "";
        }
        
        int oldEnd = str.length() - 1;
        for (int i = 0; i <= oldEnd; i++){
            if (str.charAt(i) == ' '){
                str.append("  ");
            }
        }
        
        int newEnd = str.length() - 1;
        while (oldEnd >= 0 && newEnd > oldEnd) {
            char c = str.charAt(oldEnd--);
            if (c == ' ') {
                str.setCharAt(newEnd--, '0');
                str.setCharAt(newEnd--, '2');
                str.setCharAt(newEnd--, '%');
            } else {
                str.setCharAt(newEnd--, c);
            }
        }
        return str.toString();
    }
}

3 举一反三

在合并两个数组(包括字符串)时,如果从前往后复制每个数字(或字符)则需要重复移动数字(或字符)多次,那么可以考虑从后往前复制,从而减少移动次数,提高效率。