剑指Offer(二):替换空格


 说明:

  1.本系列是根据《剑指Offer》这个系列做的一个小笔记。

  2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难。

  3.刚开始准备刷LeetCode、LintCode,突然看见一个大神研究生正在刷这个系列,故跟着大神学习。

  4.在别人基础之上进行部分优化,总结自己的观点。


问题:

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

思路:

  现在有这样一个问题 ,num="12 34 56",当你去除第一个空格的时候,那么num="12%2034 56",这个时候%20是不用循环的,如果不跳过新加入的元素,那么复杂度就会提高。当然你也可以再创建一个num1去存储,貌似复杂度更高了。

  本文使用跳过的方式,每次加入之后都会跳过新加入的数据,直接在原来的数据上更改即可。

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 string replace(string& num,const string& p,const string& aim);
 5 int main(int argc,char** argv[])
 6 {
 7     string num     = "AB CD EF 12";
 8     cout <<replace(num," ","wujinyi");;
 9     while(1);
10     return 0;
11 }
12 
13 //@replace
14 //@num     string
15 //@p    const single string
16 //@aim  const arbitrary string lower than num
17 string replace(string& num,const string& p,const string& aim)
18 {
19     for (size_t i=0; i<=num.length();i++)
20     {
21         if (num[i]==p[0])
22         {
23             num.insert(i,aim);
24             num.erase(i+aim.length(),1);
25             i+=(aim.length()-1);
26         }
27     }
28     return num;
29 }

原文地址:https://www.cnblogs.com/wjy-lulu/p/8076011.html