替换空格
题目
请实现一个函数,将一个字符串中的空格替换成“%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; } };