《剑指Offer》读书笔记02:替换空格
2015-11-27 10:45
309 查看
《剑指Offer》读书笔记02:替换空格
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.,则经过替换之后的字符串为We%20Are%20Happy.。解题思路
1.常规思维:- 用一个指针从第一个字符往后移,遇到空格则先把空格后面的所有字符往后移动两格,然后把空格替换成%20。
- 每次需移动后面O(n)个字符,假如有O(n)个空格,则时间效率为O(n2n^2)。
2.创新思维:
先计算出空格个数,然后从后往前复制和替换。
例如题目中原字符串字符数14,空格数2,每个空格替换后比之前多2个字符,则目标字符串字符数18。
从后往前,依次复制.yppaH,碰到空格,替换成02%,依次复制erA,碰到空格,替换成02%,依次复制eW,完成。
参考代码
void replaceSpace(char *str,int length) { if ( str == NULL || length <= 0 ) { return; } int spaceNum = 0; char * pRight1 = str; while ( *pRight1 != '\0' ) { if ( *pRight1 == ' ' ) { spaceNum++;//计算空格数 } pRight1++;//指针pRight1指向替换前的最后位置。 } if ( spaceNum == 0 ) { return; } else { char * pRight2 = pRight1+2*spaceNum;//指针pRight2指向替换后的最后位置。 while ( pRight2 != pRight1 ) {//结束条件 if ( *pRight1 != ' ' ) { *pRight2-- = *pRight1--;//先复制,再同时左移 } else { *pRight2-- = '0'; *pRight2-- = '2'; *pRight2-- = '%'; pRight1--;//pRight2边替换边左移,最后pRight1左移。 } } } }
相关文章推荐
- bootstrap笔记
- 基于Jquery实现仿百度百科右侧导航代码附源码下载
- liferay学习之二:实例
- Life Movie
- react native常用modules
- js快速打印一个五分制(五颗星)的评分情况
- 剖析js对浮点数运算精度问题
- jsp回车键登录代码
- 通过jquery来实现文本框和下拉框动态添加效果,能根据自己的需求来自定义最多允许添加数量,实用的jquery动态添加文本框特效
- 对抗明文口令泄露 —— Web 前端慢 Hash
- JSON表单提交(ajax异步刷新)
- Asp.net - Razor - 将Model中变量的值赋值给Javascript变量
- jquery实现两边飘浮可关闭的对联广告
- react native声明组件的两种方式
- CSS入门(8)-position和 z-index属性
- jquery图片轮播
- HTML 事件属性[w3school]
- 每个程序员都会的35个jQuery技巧
- 悬浮时显示二级列表jquery
- css3渐变