请实现一个函数,把字符串
s
中的每个空格替换成"%20"。示例 1:
- 输入:s = "We are happy."
- 输出:"We%20are%20happy."
方法一:动态开辟
思路分析:
首先分析题目知道要想把里面的空格替换不能直接替换因为字符串数组移动很麻烦,所以先统计整个字符串数组中的空格数目然后把字符串大小扩大为替换后的大小,然后用双指针方法移元素。
具体实现:
- 统计字符串数组中空格的个数
- 扩充数组到每个空格替换成"%20"之后的大小。
- 然后从后向前替换空格,也就是双指针法,过程如下:
- i 指向新长度的末尾,j 指向旧长度的末尾。
char* replaceSpace(char* s) {
int i=0;
int j=0;
int count=0;
int len=strlen(s);
for(i=0;i<len;i++){//计算空格的个数
if(s[i]==' '){
count++;
}
}
int newlen=len+count*2;//计算需要开辟的大小
char* tmp=0;
char* tm=malloc(sizeof(char)*(newlen+1));//动态开辟内存,其中+1为'\0'
if(tm!=NULL){
tmp=tm;
}
for(i=0,j=0;i<len;i++,j++){
if(s[i]==' '){
tmp[j]='%';
tmp[j+1]='2';
tmp[j+2]='0';
j+=2;
}
else{
tmp[j]=s[i];
}
}
tmp[newlen]='\0';//将'\0'补在末尾
return tmp;
}
复杂度分析:
- 时间复杂度 O(N)O(N):
- 空间复杂度 O(1)O(1) :
由于本题存放字符串的数组大小不够,与牛客的题意不同,所以不能在原数组进行扩容