python空格替换
记剑指offer05替换空格
问题描述
题⽬意义
在编程中,如果URL参数(是Internet上⽤来描述信息资源的字符串)中含有特殊字符,使服务器端⽆法正确识别,则需要将特殊字符进⾏转换,转换规则是在“%”后⾯加上ASCII码的两位⼗六进制数表⽰,以空格为例,空格的ASCII码是32,换为⼗六进制表⽰是0x20,所以空格需要被替换为“%20”。
解题思路:
⼀、. C
⾸先题⽬要求将⼀个字符替换为三个字符,每替换⼀个空格需要新增两个字符⼤⼩的空间,替换之后的字符串长度会增加,所以可想到两种⽅法。
1.将原始字符串定义⾜够长,可在原始数组中进⾏移位操作。考虑极限情况,如果原数组中全是空格,替换后的数组⼤⼩,则需要为以前的三倍,定义数组长度为字符串长度的三倍。
2.⾸先遍历原始字符串数组,记录空格数和数组长度,重新定义⼀个数组,在新的数组上进⾏移位赋值操作。
其次在移位时需要考虑对原始数组的遍历⽅向,可采⽤从前往后或者从后向前。下⾯分别分析这两种移位⽅法。
1.从前向后
如图所⽰,第⼀⾏阴影部分表⽰遇到第⼀个空格时,需要进⾏移位的位置,第⼆⾏的阴影表⽰,遇到第⼆个空格时,需要进⾏移位的位置,加⿊的部分表⽰需要进⾏两次移位的位置。
2.从后往前
不管使⽤哪种⽅法进⾏移位的时候都要记录原始数组的长度和空格数量,需要动态分配数组空间,扩展数组⼤⼩⾄少为空格数⽬的两倍。
需要两个数组,先计算出新数组的长度,建⽴新数组,同时遍历两个数组,在空格位置进⾏替换,其余位置直接赋值给新数组,直到遍历完原始数组。
char*replaceSpace(char* s){
if(s==NULL){
return NULL;
}
int i,Length=0,CountOfBlank=0;
for(i=0;;i++)
{
if(s[i]==' '){
CountOfBlank=CountOfBlank+1;
}
if(s[i]=='\0'){
break;
}
Length++;
}
char*p=(char*)malloc(sizeof(char)*(Length+2*CountOfBlank+1));
if(p==NULL){
printf("内存分配不成功!\n");
}
else{
int j=0;
for(i=0;i<Length;i++){
if(s[i]==' '){
p[j++]='%';
p[j++]='2';
p[j]='0';
}
else{
p[j]=s[i];
}
j++;
}
p[j]='\0';
// free(p);
//return p;
}
return p;
}
⼆、 python
思路:由于python有插⼊函数,可以对字典直接进⾏插⼊,删除。可以将字符串转化为数组。
class Solution:
def replaceSpace(self, s:str)->str:python 定义数组
s_dict =[]
s_dict =list(s)
for i, s_char in enumerate(s_dict):
if s_char ==' ':
s_dict.pop(i)
s_dict.insert(i,'%20')
s_str =[str(j)for j in s_dict]
str2 =''.join(s_str)
return str2
python相对于C简便很多。
如有不对的地⽅请多多指正!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论