请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。
给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。
如果不考虑空间问题,直接遍历一遍,将原有字符串复制到新的字符串那种即可,时间复杂度为o(n),空间复杂度为o(n)
char[] s=new char[3*length];
int count=0;
for (int i=0;i<length;i++){
if (iniString.charAt(i)!=' '){
s[count++]=iniString.charAt(i);
}else {
s[count++]='%';
s[count++]='2';
s[count++]='0';
}
}
return new String(s,0,count);
题意还是想在原有字符串中操作,处理这种字符串问题,都是从后往前复制,这样不会影响到未复制的字符串。原有字符串一个引用,新字符串末尾一个引用。时间复杂度为o(n),空间复杂度o(n);
int count=0;
for(int i=0;i<length;i++){
if(iniString[i]==' '){
count++;
}
}
int newLength=length+2*count;
iniString[newLength]='\0';
for(int i=length-1;i>=0;i--){
if(iniString[i]!=' '){
iniString[newLength-1]=iniString[i];
newLength=newLength-1;
}else{
iniString[newLength-1]='0';
iniString[newLength-2]='2';
iniString[newLength-3]='%';
newLength=newLength-3;
}
}
return iniString;
这也是书中给的代码,但是我在牛客上提交时,会报内存错误啥的。*** Error in `./a.out': free(): invalid next size (normal): 0x0000000002370f40 ***