首先求出字符串空格的个数,然后新字符串的长度 = 旧字符串的长度 + 2 * 空格的个数,最后从后往前遍历复制即可。
class Solution { public: //length为字符数组的总容量 void replaceSpace(char *str,int length) { if(str == nullptr || length <= 0) return; int originalLen = 0; int blankLen = 0; int i = 0; while(str[i] != ‘\0‘) { ++originalLen; if(str[i] == ‘ ‘) ++blankLen; ++i; } int newLen = originalLen + blankLen * 2; if(newLen > length) return; while(originalLen >= 0 && newLen > originalLen) { if(str[originalLen] == ‘ ‘) { str[newLen--] = ‘0‘; str[newLen--] = ‘2‘; str[newLen--] = ‘%‘; } else { str[newLen--] = str[originalLen]; } --originalLen; } } };
时间和空间复杂度都为O(n)。
原文:https://www.cnblogs.com/parzulpan/p/11256853.html