剑指Offer——替换空格

Question

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

Solution

  • 这道题目的话,因为是数组,如果从头开始遍历的话,遇到一个空格,那么后面的字符都将移动。

  • 因此我们可以考虑先判断空格的数目,然后从后面往前面复制,遇到空格直接替换就行,不需要多余的移动数据。

Code

class Solution {
public:
	void replaceSpace(char *str,int length) {
		if (str == nullptr || length <= 0)
            return;
        
        int sumOfBlank = 0;
        int originLength = 0;
        for (int i = 0; i < length; i++) {
            originLength++;
            if (str[i] == '')
                break;
            if (str[i] == ' ')
                sumOfBlank++;
        }
        
        int newLength = originLength + sumOfBlank * 2;
        if (newLength > length)
            return;
        
        int index = newLength - 1;
        for (int i = originLength - 1; i >= 0; i--) {
            if (str[i] != ' ') {
                str[index--] = str[i];
            } else {
                str[index--] = '0';
                str[index--] = '2';
                str[index--] = '%';
            }
        }
        
	}
};
原文地址:https://www.cnblogs.com/zhonghuasong/p/7100959.html