- 题目:把字符串中的每个空格替换成”%20”,如输入”we are happy.”,输出”we%20are%20happy.”
- 思路:如果从头替换空格,则会导致部分字符需要移动多次,时间复杂度为o(n^2); 考虑可以通过遍历一次字符串,知道空格的个数,这样就能确定result的长度,然后从尾移动字符或者替换字符,这样时间复杂度只有o(2*n)
- 代码:
public void replaceSpace(String str){
if(str == null){
return;
}
int numberOfSpace = 0;
int len = str.length();
for(int i = 0; i < len; i++){
if(str.charAt(i) == ' '){
numberOfSpace++;
}
}
char[] result = new char[len+2*numberOfSpace];
int total = len+2*numberOfSpace-1;
for(int i = len-1; i >= 0; i--){
char tmp = str.charAt(i);
if(tmp != ' '){
result[total--]=tmp;
}else{
result[total--] = '0';
result[total--] = '2';
result[total--] = '%';
}
}
System.out.print(Arrays.toString(result));
}