您的位置:首页 > Web前端

《剑指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左移。
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: