题解 | #替换空格#

替换空格

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

原地修改+双指针,不使用额外的辅助空间。 首先遍历字符串获取字符串中的空格数量countspace。变长后的字符串比原字符串长2*countspace个单位。 我们用两个指针ptr1\ptr2分别指向变长前的字符串末尾和变长后的字符串末尾。如果ptr1遇到的不是空格,则把这个字符复制到ptr2的位置上去,如果是空格,那么ptr2连续跳动三次,分别赋上‘0‘、’2‘、’%‘的值,直到ptr1比0小。

```class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */
    //"we%20are%20o"   
    string replaceSpace(string& s) {
        if(s.size()==0){
            return s;
        }
        // write code here
        int ptr1=s.size()-1;
        int countSapce=0;
        for(auto ch:s){
            if(ch==' '){
                countSapce++;
            }
        }
        for(int i=0;i<countSapce*2;i++){
            s.push_back(' ');
        }
        int ptr2=s.size()-1;
        while(ptr1>=0){
            if(s[ptr1]==' '){
                s[ptr2--]='0';
                s[ptr2--]='2';
                s[ptr2--]='%';
                ptr1--;
            }
            else{
                s[ptr2]=s[ptr1];
                ptr2--;
                ptr1--;
            }
        }
        return s;
        
    }
};

时间复杂度为O(N)
空间复杂度为O(1) 注:答案的空间不算在内
全部评论
可以使用resize省略掉for循环
点赞 回复 分享
发布于 2024-07-14 23:28 北京

相关推荐

评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务