剑指Offer编程题2——替换空格

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 

题目解析:

从前向后扫描时,移动元素会出现覆盖的情况,因此选择从后往前扫描:

遇到空格时,将空格以后的字符串都向后移动两个位置,空格处放%,因此需要从最后一个元素开始移动,避免元素覆盖。

代码

class Solution {
public:
void replaceSpace(char *str,int length) {
int i=length-;
int j,count=;
while(i>=) //从后向前扫描字符串
{
if(str[i]==' ')
{
for(j=length-;j>=i;j--)
str[j+]=str[j]; //将字符串从空格到最后的移动两个位置
str[i]='%';
str[i+]='';
str[i+]='';
length+=;
}
i--;
}
}
};

另一种解题:

可以先计算出有多少个空格,需要向后移动多少,这样可以减少每次都从最后一个移动

04-02 02:26