《剑指offer》面试题5:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“we are happy.”,则输出“we%20are%20happy.”。
思路:从后往前遍历字符串替换。先遍历一遍字符串,统计空格的总数space_num,由此可计算出替换后的字符串的总长度new_len。(new_len = len + space_num * 2)。准备2个指针:p1和p2,p1指向原字符串末尾,p2指向替换后的字符串末尾,如果p1指向的是一个空格,则向p2 - 2到p2位置插入字符串“%20”,然后p2 左移3位,p1左移1位;如果p1指向的不是空格,则将p1指向的字符复制到p2处,然后p1,p2都左移1位。重复比较移动过程,直到p1=p2,替换结束。
代码如下:
public String replaceSpace(StringBuffer str) {
if (str == null) {
return null;
}
int len = str.length();
int space_num = 0;
for (int i = 0;i < len;i++) {
if (str.charAt(i) == ' ') {
space_num++;
}
}
int new_len = len + space_num * 2;
str.setLength(new_len);
int p1 = len - 1;
int p2 = new_len - 1;
while(p1 >= 0 && p2 >= 0 && p1 < p2) {
if (str.charAt(p1) == ' ') {
str.replace(p2 - 2,p2 + 1,"%20");
p2 = p2 - 3;
} else {
str.setCharAt(p2--,str.charAt(p1));
}
p1--;
}
return str.toString();
}
网友评论