替换空格
时间限制:1秒 空间限制:32768K 热度指数:938460
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路有两个:
- 从前向后替换,这样的话每找到一个空格,都会将空格后的所有字符向后移动2个距离,这样的话计算量比较大,算法的复杂性大,我自己就使用的这种方法。而且,由于很久没有练习算法题,所以一开始直接str[i] = "%20",忘记一个字符不能用字符串来替代。
-
class Solution { public: void replaceSpace(char *str,int length) { for(int i = 0; i < length-1;){ if(str[i] == ' '){ for(int j = length - 1; j > i; j--){ str[j+2] = str[j]; } str[i] = '%'; str[i+1] = '2'; str[i+2] = '0'; i = i + 3; } else{ i++; } } } };
- 标准的简单方法是,所有的字符只需要移动一次即可。即首先从前向后记录一下空格的个数。然后从后向前进行空格的替换,这样的话就可以每个字符只移动一次,与第一种方法相比降低了计算复杂度。
链接:https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423 来源:牛客网 class Solution { public: void replaceSpace(char *str,int length) { int count=0; for(int i=0;i<length;i++){ if(str[i]==' ') count++; } for(int i=length-1;i>=0;i--){ if(str[i]!=' '){ str[i+2*count]=str[i]; } else{ count--; str[i+2*count]='%'; str[i+2*count+1]='2'; str[i+2*count+2]='0'; } } } };