美文网首页剑指offer
[字符串]替换空格

[字符串]替换空格

作者: 闭门造折 | 来源:发表于2018-10-10 14:11 被阅读0次

    请实现一个函数,将一个字符串中的每个空格替换成“%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;
        }
    };
    

    相关文章

      网友评论

        本文标题:[字符串]替换空格

        本文链接:https://www.haomeiwen.com/subject/kzupaftx.html