Loading

字符串的调整与替换

字符串的调整与替换

题目:字符串的调整II & 字符串的调整I

《程序员代码面试指南》第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--] = '*';
    }
}

以上两道题目都是利用逆序复制这个技巧。书上说道,其实很多字符串问题也和这个小技巧有关。字符串的面试题一般不会太难,很多题目都是考察代码实现能力。

posted @ 2022-04-24 14:57  幻梦翱翔  阅读(101)  评论(0)    收藏  举报