题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
public class Solution {
public String replaceSpace(StringBuffer str) {
int spaceCount=0;
//计算出有多少空格
for(int i=0;i<str.length();i++) {
if(str.charAt(i)==' ') {
spaceCount++;
}
}
int oldL=str.length();
int newL=oldL+spaceCount*2;
str.setLength(newL);
for(;oldL>0;) {
if(str.charAt(oldL-1)==' ') {
oldL--;
str.setCharAt(--newL,'0');
str.setCharAt(--newL,'2');
str.setCharAt(--newL,'%');
}
else {
str.setCharAt(--newL, str.charAt(--oldL));
}
}
return str.toString();
}
}
此处你当然会想,使用Java提供的API可以很方便的完成这个题目。事实的确如此,但是既然考虑算法,我们当然不能一味的使用API。
根据分析可知:我们需要先统计有多少空格(方便重新设置字符串的空间),然后进行字符的移动。
显然,从后往前移动效率更高,每个字符只移动一次。代码如上。