先统计空格个数。
- 每个空格替换成%20,长度增加2,所以如果空格数为cnt,修改后的总长度为length + 2 * cnt,最大下标为length + 2 * cnt - 1。
- 维护两个指针,一个指针j指向修改后字符串,i指向修改前字符串。
- 因为是原地修改,且j比i移动得快,所以需要从后往前遍历,防止没有遍历到的数据被覆盖。
class Solution { public: void replaceSpace(char *str,int length) { int cnt = 0; for (int i = 0; i < length; i++) { if (str[i] == ' ') cnt++; } int j = length + 2 * cnt - 1; for (int i = length - 1; i >= 0 && i != j; i--) { if (str[i] != ' ') str[j--] = str[i]; else { str[j--] = '0'; str[j--] = '2'; str[j--] = '%'; } } } };