【剑指offer】5、替换空格
题目 请实现一个函数,把字符串中的每个空格替换成"%20"。例如,We are happy. -> We%20are%20happy. 思路 如果直接从头扫描字符串,碰到空格插入 %20,并将后面的所有字符往后挪,对于O(n)空格的字符串,每次移动O(n)个字符,时间复杂度是O(n 2 )。 因此,我们先扫描一次,统计出空格的个数,直接计算出替换之后的字符串长度,两个指针分为指向原字符串和替换后字符串的末尾。 (1)没碰到空格,复制,向头前进 (2)碰到空格,p1向前近1步,p2复制%20,并前进3步。 直到两个指针相遇。 void replaceSpace(char *str,int length) { if (str == nullptr || length <= 0 ) return; int num_blank = 0, ogLength = 0; int i = 0; while( str[i] != '\0'){ ogLength++; if (str[i] == ' ') num_blank++; i++; } int newLength = ogLength + 2 * num_blank; if (newLength > length) return; //