说明:
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 }