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];
         }
     }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值