题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
1、很直接的做法:从前往后遍历:遇到空格,就将空格后面的字符往后移动两位。然后将空格替换为%20。(这样子做,每遇到一个空格,其后面的字符都需要移动一次,所以对于一个字符,其移动的次数是其前面空格的个数)
c++:
class Solution { public:void replaceSpace(char *str,int length) {// char * p =str;int i,j;for(i=0;i<length;i++){if(str[i]==' '){for(j=length-1;j>i;j--)str[j+2]=str[j];str[i]='%';str[i+1]='2';str[i+2]='0';}}} };
2、优化的解法:从后往前遍历:首先计算出将空格替换成%20后,整个字符串的长度,然后从后往前遍历,将字符移动到其最终的位置。(相对于其中第一种解法:每一个自符都最多只要移动一次)
c++:
class Solution { public:void replaceSpace(char *str,int length) {if(str == NULL||length <0) return;int oldlength = 0;int newlength = 0;int space_num = 0;for(int i = 0;str[i]!='\0';++i){++oldlength;if(str[i]==' '){++space_num;} }newlength = oldlength + space_num*2;if(newlength>length) return;while(oldlength>=0){if(str[oldlength]!=' '){str[newlength--] = str[oldlength];}else{str[newlength--]='0';str[newlength--]='2';str[newlength--]='%';}--oldlength;}return;} };