剑指 Offer 05. 替换空格

55 阅读1分钟

字符串知识-双指针法

字符串扩容 而非新建数组,节省空间。从后往前移动,节省时间。

class Solution {
public:
    string replaceSpace(string s) {
        if (s.size() == 0) return "";
        int oldSize = s.size();
        int numberOfBlank = 0;
        int i = 0;
        //计算源字符串中空格数
        while(s[i] != '\0'){
            if (s[i] == ' '){
                ++numberOfBlank;
            }
            ++i;
        }
        //扩充字符串s的大小,也就是每个空格替换成“%20”之后的大小
        s.resize(oldSize + numberOfBlank*2);
        
        int newsize=s.size();
        //从后向前将空格替换成“%20”
        for (int newP=newsize-1,oldP=oldSize-1; oldP < newP; newP--,oldP-- ){
            if (s[oldP] != ' '){
                s[newP] = s[oldP];
            }else{
                s[newP] = '0';
                s[--newP] = '2';
                s[--newP] = '%';
            }
        }
        return s;
    }
};