请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
题解:1、直接使用replaceAll也能通过,不过这种方案不是这个题目的目的
2、使用从后向前遍历,另个指针
链接:https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423
来源:牛客网
在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。
从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下
从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。
public String replaceSpace(StringBuffer str) { int spaceNum = 0; for (int i = 0; i < str.length(); i++) { if(str.charAt(i)==' ') { //使用单引号 spaceNum++; } } int oldIndex = str.length()-1; int newLength = str.length()+2*spaceNum; int newIndex = newLength-1; str.setLength(newLength); for (; oldIndex>=0; oldIndex--,newLength--) { if(str.charAt(oldIndex)==' ') { str.setCharAt(newIndex--, '0'); str.setCharAt(newIndex--, '2'); str.setCharAt(newIndex--, '%'); }else { str.setCharAt(newIndex, str.charAt(oldIndex)); } } return str.toString(); }
类似的题目:
合并两个有序的数组AB:A有足够大的空间,将B添加到A中,并且保证添加后的数组仍然有序