剑指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 }
作者:影醉阏轩窗
-------------------------------------------
个性签名:衣带渐宽终不悔,为伊消得人憔悴!
如果觉得这篇文章对你有小小的帮助的话,记得关注再下的公众号,同时在右下角点个“推荐”哦,博主在此感谢!