剑指 Offer 05.替换空格

题目

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

示例1:

输入:s = "We are happy."
输出:"We%20are%20happy."

限制:

  • 0 <= s 的长度 <= 10000

代码

思路1:从前往后遍历,遇到空格就插入,再将后面多余的空格删掉

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

思路2:先对数组扩容,再使用双指针法

class Solution {
    
    
public:
    string replaceSpace(string s) {
    
    
        int count = 0;
        int sOldSize = s.size();
        int sNewSize;
        for (int i = 0; i < sOldSize; i++) {
    
    
            if (s[i] == ' ') {
    
    
                count++;
            }
        }

        sNewSize = sOldSize + count * 2; // 乘2是因为对空格位置用3个字符替代,即有一个空格再添加两个空格即可。
        s.resize(sNewSize); // 扩容

        for (int i = sOldSize - 1, j = sNewSize - 1; i < j; i--, j--) {
    
    
            if (s[i] != ' ') {
    
     //不是空格,赋值到后面去
                s[j] = s[i];
            }
            else {
    
    
                s[j] = '0';
                s[j-1] = '2';
                s[j-2] = '%';
                j -= 2;
            }
        }
        return s;
    }
};

猜你喜欢

转载自blog.csdn.net/Star_ID/article/details/125217112