剑指offer(第二版)面试题5. 替换空格

欢迎访问我的剑指offer(第二版)题解目录
对应的牛客网题目可点击替换空格

题目描述

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

算法设计

两次遍历。第一次遍历求出字符串中空格字符的个数,假设为space。假设新字符串长度为newlen,原字符串长度为length,那么有 n e w l e n = l e n g t h + s p a c e 2 newlen=length+space*2
第二次遍历字符串,设置两个指针ijj指向新字符串末尾,i指向原字符串末尾。i不断向前遍历,当遇到空格字符时,在j指针处一次写入02%字符,j不断递减;如果遇到的不是空格字符,直接将遇到的字符拷贝到j指针处,j递减。

注意点

  1. 注意考虑原字符串为空或者传入的指针为空的情况
  2. 注意在新字符串末尾添加\0字符

C++代码

class Solution {
   public:
    void replaceSpace(char *str, int length) {
        if (str == nullptr or length == 0)
            return;
        int space = 0, newlen = 0;
        for (int i = 0; i < length; ++i)
            if (str[i] == ' ')
                ++space;
        newlen = length + space * 2;
        str[newlen] = '\0';
        for (int i = length - 1, j = newlen - 1; i >= 0; --i)
            if (str[i] == ' ') {
                str[j--] = '0';
                str[j--] = '2';
                str[j--] = '%';
            } else
                str[j--] = str[i];
    }
};
发布了528 篇原创文章 · 获赞 1015 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/richenyunqi/article/details/103385943