《剑指offer》面试题4 替换空格 Java版
(给一个足够长的字符数组,其中有一段字符,将' '(空格)替换成’%’ ‘2’ ‘0’三个字符,原字符段由’\0’结尾)
书中方法:这道题如果从头到尾扫描数组并替换,会涉及到数组的移动。如果不移动元素,从头到尾处理似乎没有什么思路。看到题目给的足够长的数组,我们要联想到从后往前处理的方式。我们计算出替换后数组的长度,可以简单的推断出原字符段处理到第一个字符的时候,新字符段也处理到第一个字符。
public void replace(char[] c){
if(c == null || c.length == 0)return;
int originTail = -1;
int newTail = -1;
int i = 0;
while(c[i] != '\0'){
originTail++;
if(c[i] == ' '){
newTail += 3;
}else{
newTail ++;
}
i++;
}
c[newTail+1] = '\0';
while(originTail >= 0){
if(c[originTail] != ' '){
c[newTail] = c[originTail];
newTail--;
}else{
c[newTail--] = '0';
c[newTail--] = '2';
c[newTail--] = '%';
}
originTail--;
}
}