剑指offer(二)之替换空格

题目描述

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

思路

不用开辟新空间的做法。
先计算出替换后的字符串总长度,维护新字符串的索引 j, 旧字符串的索引 i 。(新旧并不是说生成了新字符串,之前便于区分)

索引 i 从前往后读取字符串信息
索引 j 从后向前生成字符串,当索引 i 对应的 str[ i ] 是空格时, 就在索引 j 依次添加 0 2 % ( 这里具体看代码吧) ; 否则就添加上str[ i ];

从后向前进行构造字符串,这是为什么呢?因此构造后的字符串总比构造前要长,如果从前向后构造,那么会替换掉构造前的字符串,造成数据丢失。

代码


    public String replaceSpace(StringBuffer str) {
        int cnt = 0;
        for (int i = 0, j = str.length(); i < j; i++) {
            if(str.charAt(i) == ' ')
                 cnt++;
        }
        int j = str.length() - cnt + cnt * 3 - 1;
        int i = str.length() - 1;
        str.setLength(j+1);
        while (i >= 0) {
            if (str.charAt(i) == ' ') {
                str.setCharAt(j--,'0');
                str.setCharAt(j--,'2');
                str.setCharAt(j--,'%');
            }else str.setCharAt(j--,str.charAt(i));
            i--;
        }
        return str.toString();
    }

猜你喜欢

转载自blog.csdn.net/qq_37591656/article/details/85112869