[剑指Offer]5-替换空格

链接

https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e?tpId=13&tqId=11210&tPage=3&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题意

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

解题思路

可以覆盖原字符串或者新开一个字符串,具体应询问面试官。
这里用覆盖原字符串(假设原字符指针开辟的空间足够大)。

从后往前更改数组,维护两个指针从尾部复制字符。比较从前往后,时间复杂度由O(n^2)降到O(n);

代码

class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(!str||length<strlen(str)){
            return;
        }

        int pPre=(int)strlen(str);
        int pNew=pPre;
        for(int i=0;i<strlen(str);++i){
            if(str[i]==' '){
                pNew+=2;
            }
        }
        
        if(length<pNew){
            return;
        }
        while(pPre>=0&&pNew>pPre){
            if(str[pPre]!=' '){
                str[pNew--]=str[pPre--];
                
            }
            else{
                str[pNew--]='0';
                str[pNew--]='2';
                str[pNew--]='%';
                --pPre;
            }
        }
    }
};

posted on 2019-03-29 11:54  coding_gaga  阅读(154)  评论(0编辑  收藏  举报

导航