剑指offer-002-替换空格

题目:

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

 

知识点:

字符串

 

思路:

String是immutable类。StringBuffer是mutable的,可以修改字符串的长度 setLength(int length); 、字符串指定位置的字符 setCharAt(int position, char replace) 

本题要求将字符串中的字符,替换成字符串。

 

方法一,返回新String。可以创建一个新的StringBuffer对象,初始化为空,然后用Append方法截取原字符串从非空格到空格。

 

方法二,再原来String做修改。

1. 从前往后遍历字符串,得到空格的数量。更新字符串的长度(扩容)。

2. 从后往前替换字符串的话,每个字符串只需要移动一次;

 

方法三,Java String类方法。

 Str.toString().replace('', "%20")  

 

代码:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        
        //count the number of space from beginning to the end
        int numSpace = 0;
        for(int i = 0; i < str.length(); i++) {
            if(str.charAt(i) == ' ') {
                numSpace++;
            }
        }
        
        int oldStrLen = str.length();
        int updatePointer = str.length() + numSpace*2 - 1;
        str.setLength(str.length() + numSpace*2);
        // iterate from the end to beginning
        // i--,不要手抖写成i++
        for (int i = oldStrLen - 1; i >= 0; i--) {
            if(str.charAt(i) == ' '){
                str.setCharAt(updatePointer--, '0');
                str.setCharAt(updatePointer--, '2');
                str.setCharAt(updatePointer--, '%');
            } else {
                str.setCharAt(updatePointer--, str.charAt(i));
            }
        }
        // 转换成字符串返回
        return str.toString();
    }
}

 

上一篇:002-表格-表单-多媒体-进制


下一篇:L1-002 打印沙漏 (20分)