面试题5:替换空格
方法:首先遍历字符串,统计空格的个数,然后扩容字符串,使用两个指针,一个指向原字符串末尾,另一个指向扩容后的字符串末尾,依次向前移动指针,遇到字符就将前面指针的字符复制到后面的指针,遇到空格则依次替换为%20,时间复杂度为O(n)。
完整代码:
// length为字符串string的总容量 void ReplaceBlank(char string[], int length) { if(string == nullptr || length <= 0) return; // originalLength为字符串string的实际长度 int originalLength = 0; int numberOfBlank = 0; int i = 0; //统计空格数 while(string[i] != '\0') { ++originalLength; if(string[i] = ' ') ++numberOfBlank; ++i; } //newLength为把空格替换为%20后的字符串长度 int newLength = originalLength + numberOfBlank * 2; if(newLength > length) return; //定义两个指针 int indexOfOriginal = originalLength; int indexOfNew = newLength; while(indexOfOriginal > 0 && indexOfNew > indexOfOriginal) { if(string[indexOfOriginal] == '') { string[indexOfNew--] = '0'; string[indexOfNew--] = '2'; string[indexOfNew--] = '%'; } else string[indexOfNew--] = string[indexOfOriginal]; indexOfOriginal--; } }