题目链接
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
这道题可以直接使用str.replaceAll(" ", “%20”);来解决,或者通过创建一个新的字符串空间,从左到右遍历字符串,如果不是空格就向新字符串中添加这个字符,否则就添加%20即可
还有一种解决方法就是通过在原字符串上移动字符实现,首先计算替换所有空格后的字符串长度
由于是由空格替换为%20,因此每有一个空格,替换后的字符串长度就加2,如果字符串中有n个空格,替换后的字符串就会增加2n的长度
我们维护一个newIndex指针指向新字符串的末尾位置,oldIndex指针指向原字符串末尾位置,如果oldIndex对应位置的字符不是空格,就直接将其移动到newIndex位置上,否则就将newIndex位置上分别添加0, 2, %这三个字符
当前位置为y,不是空格,直接移动到newIndex位置上,oldIndex–, newIndex–
当遇到空格时,在newIndex位置上依次添加0, 2, %
直到oldIndex走到数组最前端,字符串移动完成
完整代码
public class Solution {
public String replaceSpace(StringBuffer str) {
int count = 0;
for (int i = 0; i < str.length(); i++){
if(str.charAt(i) == ' '){
count++;
}
}
int newStrLen = str.length() + 2 * count;
int oldIndex = str.length() - 1;
int newIndex = newStrLen - 1;
str.setLength(newStrLen);
while(oldIndex >= 0 && newIndex >= 0){
if(str.charAt(oldIndex) == ' '){
str.setCharAt(newIndex, '0');
newIndex--;
str.setCharAt(newIndex, '2');
newIndex--;
str.setCharAt(newIndex, '%');
newIndex--;
oldIndex--;
} else {
str.setCharAt(newIndex, str.charAt(oldIndex));
newIndex--;
oldIndex--;
}
}
return str.toString();
}
}