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.利用双指针从后向前填充

    为什么要从后向前填充?

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

  • 相关阅读:
    教你如何上传项目到GitHub
    Spring Boot日志使用
    Github库名命名规范
    failed to resolve org.junit.platform
    SecureCRT 关键字高亮显示
    curl 命令
    idea中展开折叠的文件夹
    python官网打不开
    小工具下载地址汇总
    Navicat12 for Mysql激活
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14314510.html
Copyright © 2011-2022 走看看