1.5

Write a method to replace all spaces in a string with ‘%20’.

思路:耗费空间的解法是,再定义一个数组,将原数组复制到新数组中,复制的过程中进行替换,空间复杂度O(n); 优化:直接在原数组中操作,不过要从后往前,不然会造成覆盖。这让我想到了memcpy实现的过程中也可能出现覆盖需要从后往前覆盖的情况。


时间复杂度:O(n)  空间复杂度:O(num_spaces)

void replaceSpaces(char* str){
     if(str==NULL) return;
     int num_spaces=0,len=0;
     for(len=0;*(str+len)!='\0';len++)
         if(*(str+len)==' ')
             num_spaces++;
     int new_len=len+num_spaces*2;
     str[new_len+1]='\0';
     for(;len>=0;len--){
         if(*(str+len)==' '){
             str[new_len--]='0';
             str[new_len--]='2';
             str[new_len--]='%';
         }else{
             str[new_len--]=str[len];
         }
     }
}

刚才对照了一下答案发现自己的写法是错误的,尽管结果都正确。因为数组的下标是从0开始的,所以new_len其实已经表示到了'\0'的位置,不需要加1. 粗心还是通病啊,克服,克服

void replaceSpaces(char* str){
     if(str==NULL) return;
     int num_spaces=0,len=0;
     for(len=0;*(str+len)!='\0';len++)
         if(*(str+len)==' ')
             num_spaces++;
     int new_len=len+num_spaces*2;
     str[new_len]='\0';
     new_len--;
     for(len=len-1;len>=0;len--){
         if(*(str+len)==' '){
             str[new_len--]='0';
             str[new_len--]='2';
             str[new_len--]='%';
         }else{
             str[new_len--]=str[len];
         }
     }
}



你可能感兴趣的:(1.5)