一、题目
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof
二、思路
首先遍历一遍字符串,记录其中空格的数量,然后申请原来字符串长度+2*空格数量+1的空间(这里的1用来做字符串结尾的标志)记为arr
然后把字符串复制到新申请的字符串中去,使用双指针 i 和 j 同时扫描arr,j 从新字符串的末尾从前往后扫描,i 从老字符串结尾的位置开始往前扫描。(注意是扫描的新数组,位置是从老数组获取到的,理解不了这里可以直接看代码)
当 i 扫描到不是空格的字符就可以直接赋值给 j 指针指向的位置,当 i 扫描到空格则 j 指针直接倒着赋值 “%20” 然后重复之前的操作,直到i到第一个字符替换完成。具体实现可以查看下面的代码。
三、C语言解法
char* replaceSpace(char* s){
if(s == NULL) return NULL;
int len = strlen(s);
int count = 0;
char *head =s ;
while(*s!=NULL){
if(*s == ' ')
count++;
s++;
}
int NewLen = len+count*2;
char *arr = (char*)malloc(NewLen*(sizeof(char))+1);
strcpy(arr,head);
arr [NewLen] = NULL;
for(int i = len-1,j = NewLen-1;i>=0;){
if(arr[i] != ' ')
arr[j--] = arr[i--];
else{
arr[j--] = '0';
arr[j--] = '2';
arr[j--] = '%';
i--;
}
}
return arr;
}