替换空格

请实现一个函数,将一个字符串中的空格替换成“%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中,并且保证添加后的数组仍然有序

原文地址:https://www.cnblogs.com/Michael2397/p/8682980.html