先统计空格个数。

  1. 每个空格替换成%20,长度增加2,所以如果空格数为cnt,修改后的总长度为length + 2 * cnt,最大下标为length + 2 * cnt - 1。
  2. 维护两个指针,一个指针j指向修改后字符串,i指向修改前字符串。
  3. 因为是原地修改,且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--] = '%';
			}
		}
	}
};