剑指05题
剑指05题虽然简单,使用动态内存很容易实现,使用C++也很简单;但是作者的意图是时间复杂度O(n),并且不使用动态内存申请,并且C/C++需要保证传入参数长度够用。下面是C的题解,只体现作者思路,并不是最优解。
#include<stdio.h> #include<string.h> #include<stdlib.h> char* replaceSpace(char* s){ int numN=0; for(int i=0; s[i]; i++){ if(s[i]==' '){ numN++; } } int firstlen=strlen(s); int finallen=firstlen+numN*2; char *p=s+firstlen-1; char *q=s+finallen-1; while(p!=s){ if(*p==' '){ p--; *q--='0'; *q--='2'; *q--='%'; }else{ *q=*p; p--; q--; } } return s; } int main(){ char str[64]; memset(str,0x00,64); strcat(str,"We are happy."); printf("%s\n",replaceSpace(str)); }