空格替换

描述

设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。

你的程序还需要返回被替换后的字符串的长度。

注意事项:如果使用 JavaPython, 程序中请用字符数组表示字符串。

样例

对于字符串 "Hello World" , 长度为 11
替换空格之后,参数中的字符串需要变为 "Hello%20World",并且把新长度 17 作为结果返回。

思路

  1. 循环遍历字符数组
  2. 碰到空字符则将空字符后所有的字符向后移动两位(假设字符数组有足够长度),防止添加 %20 时,造成覆盖而导致数据丢失.
  3. 将空字符以及后两位共 3 个位置 替换成 %20
  4. 将字符数组的长度 +2

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public int replaceBlank(char[] string, int length) {
for (int i = 0; i < length; i++) {

if (string[i] == ' ') {
for (int j = length + 2; j != i + 2; j--) {
string[j] = string[j - 2];
}
string[i + 2] = '0';
string[i + 1] = '2';
string[i] = '%';
length += 2;
}
}
return length;
}

图解

无标题.png-38.5kB

要点

  1. 本题要求是将参数中的字符数组改变,而不能通过创建一个新字符数组进行操作,然后将新字符数组赋值给原字符数组。
  2. 碰到空格要将字符数组的所有字符整体向后移动两位。

LintCode:空格替换