[剑指Offer] 2.替换空格
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
【思路1】一旦找到空格则将空格后的字符串整体后移两位,然后将%20插入空格处
1 //length为牛客系统规定字符串输出的最大长度,固定为一个常数 2 class Solution { 3 public: 4 void replaceSpace(char *str,int length) { 5 int i,j; 6 for(i = 0; i < length; i ++) { 7 if(str[i] == ' ') { 8 for(j = length; j >= i + 3; j --) { 9 str[j] = str[j-2]; 10 } 11 str[i] = '%'; 12 str[i+1] = '2'; 13 str[i+2] = '0'; 14 } 15 } 16 } 17 };
【思路2】从后往前查找,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次。效率更高。
1 class Solution { 2 public: 3 void replaceSpace(char *str,int length) { 4 int num_of_space = 0; 5 for(int i = 0;i < length;i ++){ 6 if(str[i] == ' ') 7 num_of_space ++; 8 } 9 int size = length + 2*num_of_space; 10 int index = size - 1; 11 for(int i = length - 1;i >= 0;i --){ 12 if(str[i] != ' '){ 13 str[index --] = str[i]; 14 } 15 else{ 16 str[index --] = '0'; 17 str[index --] = '2'; 18 str[index --] = '%'; 19 } 20 } 21 } 22 };