题目描述
请实现一个函数,把字符串中的每个空格替换成 %20 。例如输入”We are happy”,则输出”We%20are%20happy”
不能用java的一些api,完全用C语言的方式完成本题,不然会被鄙视。
解题思路
虽然我们可以使用遍历的方式,创建一个新的空数组来完成这道题,时间复杂度也只是O(n),但是浪费了很多空间。
虽然我们可以正序遍历数组,每碰到一个空格,就将后边的所有元素向后移动,这样虽然不用开辟冗余的空间,但是时间复杂度较高,
最后一部分元素需要被移动 N*空格数 次。
如果我们采用倒序的方式遍历和移动数组,那么时间复杂的和空间复杂度都是最低的。
- 先遍历一次字符串,统计空格出现的次数,每出现一个空格,对改数组额外开辟2位。
- 从字符串的后面开始复制和替换。
- 指针P1指向原始字符串末尾,指针P2指向开辟空间后字符串末尾
- P1向前移动,逐个把字符复制到P2,直到碰到空格为止
- 碰到空格后,P1向前移动一位,P2向前移动三位的同时将%20填充
- 当P2追赶上P1时,结束复制,表示所有空格已经替换完毕
代码实现
|
|