Loading

【剑指 Offer】005. 替换空格

题目描述

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

  • 示例 1:
    输入:s = "We are happy."
    输出:"We%20are%20happy."

  • 限制:
    0 <= s 的长度 <= 10000

方法一:从前往后,O(N^2)

从前往后遍历,遇到空格替换成 '%20',由于 C++ 字符串可以修改,C++ 此时需要 O(N^2),遍历 O(N)移动 O(N),而 python 和 java 字符串是不能修改的,需要 O(N) 额外空间。

// C++
string replaceSpace(string s)
{
    string res;
    
    for(auto c : s)
    {
        if(c == ' ')
        {
            res.push_back('%');
            res.push_back('2');
            res.push_back('0');
        }else
            res.push_back(c);
    }
    return res;
}
def replaceSpace(s: str) -> str:
    res = []
    for c in s:
        if c == ' ':
            res.append('%')
            res.append('2')
            res.append('0')
        else:
            res.append(c)
    return ''.join(res)

方法二:从后往前遍历,O(N)

主要思想:先遍历一遍统计字符串有多少空格,再对字符串扩容后从后往前遍历,同时交换字符位置或增添'%20'替换空格。

// C++
string replaceSpace2(string s)
{
    int count = 0, len = s.size();

    for (char c : s)
    {
        if (c == ' ')
            count++;
    }

    s.resize(len + 2 * count);

    for (int i = len - 1, j = s.size() - 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;
}
posted @ 2022-01-03 19:33  锦瑟,无端  阅读(35)  评论(0编辑  收藏  举报