替换空格
2018-07-06 本文已影响10人
lvlvforever
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
最容易想到的方法是遍历字符串,遇到一个空格则进行替换,同时需要将后面的字符依次后移,这样操作时间复杂度也是最高的,O(n^2)。
一个空格需要被%20代替,如果得知了空格的数量,那么增加的长度也是确定的了。
我们可以先遍历一遍,获取空格数量,然后对字符数组扩容,从后往前遍历字符,遇到空格则替换为%20。
在进行合并操作时,如果从前往后合并移动元素过多,不如试试从后往前。
以下代码仅供参考
if (str == null || str.length() < 1) {
return "";
}
int spaceCount = 0;
for (int i = 0; i < str.length(); i++) {
if(str.charAt(i) == ' '){
spaceCount++;
}
}
int length = str.length();
int finalLength = length + spaceCount*2; //计算最终长度
int ptr = finalLength-1;
str.setLength(finalLength);
for (int i = length-1; i >= 0; i--) {
char ch = str.charAt(i);
if(ch == ' '){
str.setCharAt(ptr--,'0');
str.setCharAt(ptr--,'2');
str.setCharAt(ptr--,'%');
}else{
str.setCharAt(ptr--,ch);
}
}
return str.toString();