剑指offer05 替换空格

99 阅读1分钟

题目

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:

输入:s = "We are happy."
输出:"We%20are%20happy."   限制:
0 <= s 的长度 <= 10000

思路

字符串

采用字符串拼接的方法,坏处是这样比较浪费空间:

class Solution {
public:
    string replaceSpace(string s) {
        for(int i = 0; i < s.size(); i++){
            if(s[i] == ' '){
                int len = s.size();
                s = s.substr(0,i) + "%20" + s.substr(i + 1,len);
            }
        }
        return s;
    }
};

双指针

用双指针完成,先进行扩容,使字符串的容量可以容下空格替换为"02%"。
然后两个指针i,j一个指向原字符串一个指针新资产,从后往前遍历,遇到空格就用"02%"替换,否则直接复制下来即,指针重合时遍历结束;

class Solution {
public:
    string replaceSpace(string s) {
        
        int len = s.size();//记录现在长度
       //扩容
       for(int i = 0; i < len; i++){
           if(s[i] == ' ') s += "00";
       }

        //双指针
        for(int i = s.size() - 1,j = len - 1;j < i;j--){
            if(s[j] == ' ') {
                s[i--] = '0';
                s[i--] = '2';
                s[i--] = '%';
            }
            else
                s[i--] = s[j];
        }
        return s;
    }
};