zoukankan      html  css  js  c++  java
  • 剑指 Offer 05. 替换空格

    题目

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

    代码

    法一、自己写的

     1 class Solution {
     2 public:
     3     string replaceSpace(string s) {
     4         string res;
     5         for(int i = 0;i < s.length();i++){
     6             if(s[i] != ' ') res.push_back(s[i]);
     7             else{
     8                 res.push_back('%');
     9                 res.push_back('2');
    10                 res.push_back('0');
    11             }
    12         }
    13         return res;
    14     }
    15 };

    浪费了空间

    法二、数组填充问题:双指针+从后向前填充

     1 class Solution {
     2 public:
     3     string replaceSpace(string s) {
     4         int count = 0;
     5         int oldSize = s.size();  //记录原始数组大小
     6         for(int i = 0;i < s.size();i++){
     7             if(s[i] == ' ') count++;
     8         }
     9         s.resize(s.size()+2*count);
    10         for(int i = oldSize - 1,j = s.size()-1;i < j;i--){
    11             if(s[i]!=' ') {s[j--] = s[i];}
    12             else{
    13                 s[j--] = '0';
    14                 s[j--] = '2';
    15                 s[j--] = '%';
    16             }
    17         }
    18         return s;
    19     }
    20 };

    注意:双指针移动的循环终止条件(第十行)是 两个指针不重合,而不是 i > 0;

    i>0 时的错误例子 :空字符串"    "

    总结

    对于数组填充类问题:

    1.扩充数组 resize

    2.利用双指针从后向前填充

    为什么要从后向前填充?

    因为每替换一个字符,其他元素要向后移。如果采用从前向后填充,意味着先把其他元素后移,再填充。这就是双层循环。如果双指针来进行后向填充,就会减少一层循环。

  • 相关阅读:
    余佳文 超级课程表创始人
    JavaScript 运行机制详解:再谈Event Loop
    koa2 async和await 实战详解
    node.js
    Mac版MySQL安装最新教程
    nw.js 打包与发布
    【514】keras Dense 层操作三维数据
    【513】keras 后端函数说明
    【512】keras 中的核心网络层
    【511】Keras 函数式 API
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14314510.html
Copyright © 2011-2022 走看看