面试题04_替换空格_剑指Offer系列

题目描写叙述



请实现一个函数,将一个字符串中的空格替换成“%20”。

比如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

解题思路

这样的题目从前往后扫描的话。须要移动多次。

这样的情况下从后往前扫描。

首先扫描一遍。找到空格的个数,算出须要加入多少个20%,即替换后的字符串的长度 = 原字符串长度 +  空格数*2

准备两个指针一个指针p1指向当前字符串的最后位置,还有一个指针p2指向新字符串的最后位置。

然后依次向前扫描。当遇到空格的时候。p1向前移动一个位置,p2向前移动三个位置,而且依次用20%替换。

代码实现

class Solution {
public://注意:length是整个字符串的总容量 包含未占用的空间
void replaceSpace(char *str, int length) {
//首先推断边界条件,如空啥的
if (str == nullptr || length <= 0)
return;
int originLen = 0;
int numOfblank = 0;
int i = 0;
while (str[i] != '\0')
{
originLen++;
if (str[i] == ' ')
numOfblank++;
i++;
}
int newLen = originLen + numOfblank * 2;
if (newLen > length)
return; while (originLen >= 0 && newLen > originLen)
{
if (str[originLen] == ' ')
{
str[newLen--] = '0';
str[newLen--] = '2';
str[newLen--] = '%';
}
else
str[newLen--] = str[originLen];
originLen--;
}
}
};
上一篇:一、JPEG文件格式-----压缩框架


下一篇:【工作篇】了解升级 Spring 版本导致的跨域问题