剑指-替换空格

题目:
请实现一个函数,把数组中的每个空格替换成%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;
}

你可能感兴趣的:(剑指,剑指offer)