字符串替换空格
2014-11-22 15:39
239 查看
题目:请实现一个函数,把字符串中的每个空格替换成"%20",并尽可能的降低时间复杂度。例如:输入"We are happy.",则输出"We%20are%20happy."
分析:最直接的做法就是从头到尾扫描字符串,每一次碰到空格字符的时候就做替换。但是这样是把一个字符替换成3个字符,我们必须要把空格后面的所有的字符都后移两个字节,否则就会有两个字符别覆盖,其时间复杂度为O(n2)
我们可以先遍历一次字符串,统计出字符串中空格的总数,从而计算出替换后字符串的总长度。然后我们从字符串的尾部进行复制替换。设置两个指针P1,P2,P1指向原字符串长度的结尾,P2指向替换后字符串的结尾,然后向前移动P1,逐个P1所指的复制到P2,当遇到空格时,将P1向前移动一格,然后在P2之前插入"%20",然后将P2前移三个字符串,然后继续前进,最终完成。这种算法的时间复杂度是O(n),其C++代码如下:
本文出自 “仙路千叠惊尘梦” 博客,请务必保留此出处http://secondscript.blog.51cto.com/9370042/1581314
分析:最直接的做法就是从头到尾扫描字符串,每一次碰到空格字符的时候就做替换。但是这样是把一个字符替换成3个字符,我们必须要把空格后面的所有的字符都后移两个字节,否则就会有两个字符别覆盖,其时间复杂度为O(n2)
我们可以先遍历一次字符串,统计出字符串中空格的总数,从而计算出替换后字符串的总长度。然后我们从字符串的尾部进行复制替换。设置两个指针P1,P2,P1指向原字符串长度的结尾,P2指向替换后字符串的结尾,然后向前移动P1,逐个P1所指的复制到P2,当遇到空格时,将P1向前移动一格,然后在P2之前插入"%20",然后将P2前移三个字符串,然后继续前进,最终完成。这种算法的时间复杂度是O(n),其C++代码如下:
void ReplaceBlank(cahr string[].int length) { if(string==NULL||length<=0) return; int originalLength=0; int numberOfBlank=0; int i=0; while(string[i]!='\0') { ++originalLength; if(string[i]==' ') ++numberOfBlank; ++i; } int newLength=originalLength+numberOfBlank*2; if(newLength>length) return; int indexOfOriginal=originalLength; int indexOfNew=newLength; while(indexOfOriginal>=0&&indexOfNew>indexOfOriginal) { if(string[indexOfOriginal]==' ') { string[indexOfNew--]=='0'; string[indexOfNew--]=='2'; string[indexOfNew--]=='%'; } else { string[indexOfNew--]=string[indexOfOriginnal]; } indexOfOriginnal; } }
本文出自 “仙路千叠惊尘梦” 博客,请务必保留此出处http://secondscript.blog.51cto.com/9370042/1581314
相关文章推荐
- 【每日一题】替换字符串中的空格为$$$。要求时间复杂度为O(N)
- 请实现一个函数,将一个字符串中的空格替换成“%20”(Python实现)
- 算法爱好者——算法题:替换字符串中的空格 ? 待解决
- iOS字符串NSString中去掉空格(或替换为某个字符串)
- 【剑指offer】将空格替换制定字符串
- 把一个字符串的空格替换成20%
- SQLServer如何删除字段中的某个字符串,或者替换为空格?
- 【剑指offer】将字符串中的空格替换成"%20"
- 剑指offer-02-将一个字符串中的空格替换成“%20”
- 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- javascript将字符串中的多个空格替换为一个空格的正则实例
- 替换字符串里的空格与基本字符串压缩
- 关于如何讲字符串中的空格或者\n替换为\r\n
- 替换字符串空格+N的阶乘末尾0个数+整数二进制位中1的个数
- 字符串中的空格替换问题(Java版)
- 字符串空格替换
- 题目:请实现一个函数,将一个字符串中的空格替换成“%20”
- 字符串空格替换
- 将一个字符串中的空格替换成“ ”
- 把字符串中的每个空格替换程“%20”,例如输入“I love my hometown”,输出为”I%20love%20my%20hometown”