剑指 Offer - 5 替换空格

描述

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

数据范围

0<=len(s)<=1000。保证字符串中的字符为大写英文字母、小写英文字母和空格中的一种。

解法 0 - 书中 C 语言实现,双指针、从后向前

  • 先扫描原始字符串长度、空格数量,计算新字符串长度
  • 从后向前扫描 while(idx_org>=0 && idx_new>idx_org) ...

解法 1 - 相对传统的解法

string replaceSpace(string s) {
    string res;
    for(auto c : s)
    {
        if(c == ' ')
            res += "%20";
        else
            res += c;
    }
    return res;
}

简单好理解,o(n) 时间、空间复杂度,无特殊要求推荐该解法

解法 2 - 充分利用标准库、代码较少

string replaceSpace(string s) {
    unsigned long pos;
    while((pos = s.find(" ")) != string::npos)
        s.replace(pos, 1, "%20");
    return s;
}

复习下 find、replace 的用法
多次扫描 s,查找其中的空格,效率“可能”不高(实际上不一定很差,要测量才知道!)

posted @ 2021-10-25 21:31  Zijian/TENG  阅读(90)  评论(0编辑  收藏  举报