字符串 —— 替换空格

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

public class Solution {
    public String replaceSpace(StringBuffer str) {
    
    }
}




思路:

  1. 从前往后计算空格的数量

  2. 从后往前替换字符

字符串 —— 替换空格_第1张图片
很明显 “We Are Happy”,空格的数量 spaceNum = 2,所以数组容量要增加 spaceNum*2

然后准备一个写指针和一个读指针,每当读指针指向的内容不是空格时,就将该内容复制到写指针指向的位置,将指针往前移动;当读指针指向的内容是空格时,将 “%20” 这三个字符填充到写指针指向的位置,将指针往前移动。

public class Solution {
    public String replaceSpace(StringBuffer str) {
        char[] chars = str.toString().toCharArray();
 
        // 计算空格数量
        int spaceNum = 0;
        for (char c : chars){
            if (c == ' ') {
                spaceNum++;
            }
        }
 
        if (spaceNum == 0)
            return str.toString();
 		
 		// 将旧的数组进行扩容,目的是为了在同一个数组中进行操作
        char[] newChars = new char[chars.length + spaceNum * 2];
        System.arraycopy(chars, 0, newChars, 0, chars.length);
 
        int r = chars.length - 1;        // 读指针
        int w = newChars.length - 1;     // 写指针
 
        // 从后往前添加
        for (; spaceNum > 0; ){
            if (newChars[r] == ' ') {
                newChars[w--] = '0';
                newChars[w--] = '2';
                newChars[w--] = '%';
                spaceNum--;
                r--;
            } else {
                newChars[w--] = newChars[r--];
            }
        }
 
        return String.valueOf(newChars);
    }
}

你可能感兴趣的:(剑指offer)