题解 | #替换空格#

替换空格

https://www.nowcoder.com/practice/0e26e5551f2b489b9f58bc83aa4b6c68

//看到这题第一时间能想到一些思路。比如从前往后进行原地替换——这样每次替换后都要向后移动大量元素,时间复杂度是n^2(准确来说是n*k,取决于空格的数量)。
//另一个思路是开辟一个新字符串,每次遇到空格后都写入%20,其他时候则正常写入。这样做的缺点是要额外花On的空间。
//代码随想录提供了一个原地操作的On办法。先统计空格的数量,然后为字符串开辟额外的空间,用双指针法,一个指向新空间末,一个指向原字符串末。两个一起往左移动。没遇到空格时,将原字符串的内容拷到新空间中。遇到空格时,则让指向原字符串的指针暂停一下,让指向新空间的连动3步把%20打出来。
class Solution {
public:
    string replaceSpace(string s) {
        int spacecount=0;
        int originsize=s.size();//扩容前的size
        for (int i=0; i<originsize; i++) {
            if (s.at(i)==char{' '}) {
                spacecount++;
            }
        }
        //扩容
        s.resize(originsize+spacecount*2);
        int originindex=originsize-1;
        int newindex=s.size()-1;
        while (spacecount>0) {
            if(s.at(originindex)!=char{' '})//没有遇到空格就做正常的平移复制
            {
                s.at(newindex)=s.at(originindex);
                newindex--;
                originindex--;
            }else {
                s.at(newindex--)=char{'0'};
                s.at(newindex--)=char{'2'};
                s.at(newindex--)=char{'%'};
                originindex--;
                spacecount--;
            }
        }
        return s;
    }
};

全部评论

相关推荐

叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务