【剑指offer】替换空格

来源:互联网 发布:网络大学报名流程 编辑:程序博客网 时间:2024/06/03 22:58

题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路
如果从前往后遍历,每遇到一个空格,后面的字符都需要向后移动2位,全部替换完时,大部分字符都需要移动多次,然而从后往前遍历时,先计算工序多少空间,每个字符只需要向后移动一次,为空格提供位置。

代码

public class Solution {    public String replaceSpace(StringBuffer str) {        int spacenum = 0;//spacenum为计算空格数        for(int i=0; i<str.length();i++){            if(str.charAt(i)==' ')                spacenum++;        }        int indexold = str.length()-1; //indexold为为替换前的str下标//        int newlength = str.length() + spacenum*2;//计算空格转换成%20之后的str长度//        int indexnew = newlength-1;//indexold为为把空格替换为%20后的str下标        str.setLength(newlength);//使str的长度扩大到转换成%20之后的长度,防止下标越界        for(;indexold>=0 && indexold<newlength;--indexold){                 if(str.charAt(indexold) == ' '){  //                str.setCharAt(indexnew--, '0');                str.setCharAt(indexnew--, '2');                str.setCharAt(indexnew--, '%');                }else{                    str.setCharAt(indexnew--, str.charAt(indexold));                }        }        return str.toString();    }}