字符串的调整与替换
字符串的调整与替换
《程序员代码面试指南》第83题 P265 难度:士★☆☆☆
原问题:遍历一遍,得到chas的左半区的长度len和左半区的空格数num。当空格被“%20”替代后,长度将是len×2+num。然后从左半区的最后一个字符开始逆序遍历,同时将字符复制到新长度最后的位置,并依次向左逆序复制。遇到空格字符就依次对“0”、“2”和“%”进行复制。
具体过程如下:
public void replace(char[] chas) {
if (chas == null || chas.length == 0) {
return;
}
int num = 0;
int len = 0;
for (len = 0; len < chas.length && chas[len] != 0; len++) {
if (chas[len] == ' ') {
num++;
}
}
int j = len + num * 2 - 1;
for (int i = len - 1; i > -1; i--) {
if (chas[i] != ' ') {
chas[j--] = chas[i];
} else {
chas[j--] = '0';
chas[j--] = '2';
chas[j--] = '%';
}
}
}
补充问题:依然是从右向左逆序复制,遇到数字字符则直接复制,遇到“*”字符不复制。把数字字符复制完后,再把左半区全部设置成“*”即可。
public void modify(char[] chas) {
if (chas == null || chas.length == 0) {
return;
}
int j = chas.length - 1;
for (int i = chas.length - 1; i > -1; i--) {
if (chas[i] != '*') {
chas[j--] = chas[i];
}
}
for (; j > -1;) {
chas[j--] = '*';
}
}
以上两道题目都是利用逆序复制这个技巧。书上说道,其实很多字符串问题也和这个小技巧有关。字符串的面试题一般不会太难,很多题目都是考察代码实现能力。

浙公网安备 33010602011771号