替换空格

题目

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

思路

1. 从头到尾遍历字符串做替换,时间复杂度为O(n2),效率低

2.从尾到头遍历字符串做替换,时间复杂度为O(n),效率高

实现

1.边界检查,判断字符数组是否为空(替换前)

2.遍历字符串,统计空格总数num_blank,统计替换前字符个数len,统计替换后字符个数new_len,其中new_len= len+ 2*num_blank

3.边界检查,判断字符数组是否越界(替换后)

4.替换空格,用指针P1指向原始字符串的末尾,指针P2指向替换后字符串的末尾。

  向前移动指针P1,如果P1指向的元素不是空格,则将P1指向的元素复制给P2指向的位置;

  如果P1指向的元素是空格,则P2依次向前移动并插入%20。当P1==P2时,结束替换。

class Solution {
public:
    string replaceSpace(string s) {
        if (s.empty()) {
            return s;
        }

        int num_blank = 0;
        for (int i = 0; i < s.size(); ++i) {
            if (s[i] == ' ') {
                ++num_blank;
            }
        }

        int old_len = s.size() - 1;
        int new_len = old_len + num_blank*2;
        //char *可检查是否越界
        s += string(num_blank * 2, ' ');
        while (old_len >= 0 && new_len > old_len) {
            if (s[old_len] == ' ') {
                s[new_len--] = '0';
                s[new_len--] = '2';
                s[new_len--] = '%';
            }
            else {
                s[new_len--] = s[old_len];
            }
            --old_len;
        }
        return s;
    }
};

 

posted on 2018-12-06 12:40  tianzeng  阅读(114)  评论(0编辑  收藏  举报

导航