剑指offer 面试题5:替换空格
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy. 则经过替换之后的字符串为We%20Are%20Happy。
编程思想
首先求出字符串空格的个数,然后新字符串的长度 = 旧字符串的长度 + 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)。