场景:在不复制字符串前提下,将某一字符串中空格替换为”%20”
思路:在不复制字符串前提下,如果采取从前往后遍历字符串,那么除了第一个空格之外,后面的空格的移动次数都不止一次。所以采取从后往前遍历的方式,先计算出字符串空格数,然后对字符串进行扩容,使用两个指针进行一前一后遍历即可实现
算法实现如下
/**
* 将字符串中空格替换为"%20"算法
* @param string
* @param length char数组总容量
*/
public void replaceBlank(char[] string,int length) {
if(string==null||length<=0){
return;
}
int count = 0;
int len = 0;
while(string[len]!='\0'){
len++;
if(string[len]==' '){
count++;
}
}
int newLen = len + 2*count;
if(newLen>length){
return;
}
len--;
newLen--;
while(newLen>=0&&len<newLen){
if(string[len]==' '){
string[newLen--] = '0';
string[newLen--] = '2';
string[newLen--] = '%';
len--;
}else{
string[newLen] = string[len];
len--;
newLen--;
}
}
}