题目:
请实现一个函数,把数组中的每个空格替换成%20,例如:输入bie zhi hua,则输出bie%20zhi%20hua
算法思路:
先遍历一次字符串,统计出字符数组中空格数量,并计算出替换后的总长度。
然后,从字符数组末尾开始复制和替换。由于所有的字符只移动一次,所以这个算法的时间效率为O(n)
public static void main(String[] args) {
char[] str = {'b', 'i', 'e', ' ', 'z', 'h', 'i', ' ', 'h', 'u', 'a'};
char[] newStr = replaceBlack(str);
System.out.println(newStr);
}
private static char[] replaceBlack(char[] str) {
int blackCount = 0;
for (int i = 0; i < str.length; i++) {
if (str[i] == ' ') {
blackCount++;
}
}
int originLength = str.length;
int newLength = str.length + blackCount * 2;
char[] newStr = new char[newLength];
int indexOrigin = originLength - 1;
int indexNew = newLength - 1;
while (indexOrigin >= 0 && indexNew >= 0) {
if (str[indexOrigin] == ' ') {
newStr[indexNew--] = '0';
newStr[indexNew--] = '2';
newStr[indexNew--] = '%';
} else {
newStr[indexNew--] = str[indexOrigin];
}
indexOrigin--;
}
return newStr;
}