【剑指Offer】替换空格

题目

请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.“。

时间复杂度为O(n^2)的解法,不足以拿到Offer

时间复杂度为O(n)的解法,搞定Offer就靠它了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public String replaceSpace(StringBuffer str) {
int originalLength = str.length();
int numberOfBlank = 0;

for (int i = 0; i < originalLength; i++){
if (str.charAt(i) == ' ')
numberOfBlank++;
}

int newLength = originalLength + 2 * numberOfBlank;
str.setLength(newLength);

int indexOfOriginal = originalLength - 1;
int indexOfNew = newLength - 1;

while (indexOfNew > indexOfOriginal){
if (str.charAt(indexOfOriginal) == ' '){
str.setCharAt(indexOfNew, '0');
str.setCharAt(--indexOfNew, '2');
str.setCharAt(--indexOfNew, '%');
}
else
str.setCharAt(indexOfNew, str.charAt(indexOfOriginal));

indexOfNew--;
indexOfOriginal--;
}

return str.toString();
}

相关题目

有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入到A1中并且所有的数字是排序的。