[字符串]替换空格

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

用java非常简单

首先把strbuffer转换成string,然后直接用replaceALL就行了
时间复杂度O(n),不需要额外空间

public class Solution {
    public String replaceSpace(StringBuffer str) {
        //将str的值转换为String
        String res = new String(str);
        //替换操作
        res = res.replaceAll(" ", "%20");
        return res;
    }
}

老老实实实现的的思路是用双指针

扫描一遍,得到所有的空格数spaceNum
假设原字符串有X个非空格,Y个空格
则新字符串总共有X+3Y个字符

新的字符串从X+3Y-1开始,逆序填入内容
从后往前扫描原字符串,遇到空格就向新字符串填入三个字符,遇到非空格就向新字符串填入当前字符
时间复杂度是O(n),两遍扫=2n,需要额外的1个空间存储空格数

class Solution {
public:
    void replaceSpace(char *str,int length) {
        //参数导致的无效情况
        if(str == NULL || length <= 0){
            return;
        }
        
        //计算空格总数
        int spaceNum = 0;
        for(int i = 0; i < length; i++){
            if(str[i] == ' '){
                spaceNum++;
            }
        }
        
        //从后往前生成新字符串
        //新字符串最末尾位置为length+2spaceNum-1
        int newlen = length + 2 * spaceNum - 1;
        for(int i = length - 1; i >= 0; i--){
            //是空格,则依次反向插入0 2 %
            if(str[i] == ' '){
                str[newlen--] = '0';
                str[newlen--] = '2';
                str[newlen--] = '%';
            }
            //不是空格,直接插入原字符
            else{
                str[newlen--] = str[i];
            }
        }
        return;
    }
};

你可能感兴趣的:([字符串]替换空格)