/**
* 问题:字符串的调整与替换
* 给定一个字符类型的数组chas[], chas 右半区全是空字符, 左半区不含有空字符。现
* 在想将左半区中所有的空格字符替换成"%20", 假设chas右半区足够大,可以满足替换所需要
* 的空间, 请完成替换函数。
* 【举例】
* 如果把chas的左半区看作字符串, 为"a b c", 假设chas的右半区足够大。替换后,
* chas的左半区为'a%20b%20%20c"。
* 【要求】
* 替换函数的时间复杂度为O(N),额外空间复杂度为O(1)。
* 【解答】
* 遍历一遍可以得到两个信息,chas的左半区有多大,记为len, 左半区的空格数有多少,记为
* num, 那么可知空格字符被"%20"替代后, 长度将是len+2*num。接下来从左半区的最后一个字
* 符开始倒着遍历, 同时将字符复制到新长度最后的位置, 并依次向左倒着复制。遇到空格字
* 符就依次把"O"、"2"和"%"进行复制。这样就可以得到替换后的chas数组。
*
* @author 雪瞳
*/
public class Replace {
public static char[] replace(char chas[]){
if (chas == null || chas.length==0){
return null;
}
//空格数量
int num = 0;
//chas左半区长度
int len = 0;
for (len = 0;len<chas.length && chas[len]!=0;len++){
if(chas[len]==' '){
num++;
}
}
int j = len+2*num-1;
char result[] = new char[j+1];
for(int i=len-1;i>-1;i--){
if(chas[i]!=' '){
result[j--]=chas[i];
}else {
result[j--]='0';
result[j--]='2';
result[j--]='%';
}
}
return result;
}
}
class Test{
public static void main(String[] args) {
char chas[]= new char[]{'a',' ','b',' ',' ','c'};
char[] replace = Replace.replace(chas);
for (char res:replace){
System.err.print(res);
}
}
}