剣指-スペースを置換

2926 ワード

テーマ:関数を実装して、配列の中の各スペースを%20に置き換えてください.例えば、bie zhi huaを入力すると、bie%20 zhi%20 huaが出力されます.
アルゴリズムの考え方:まず文字列を1回巡り、文字配列中のスペースの数を統計し、置換後の総長を計算します.次に、文字配列の末尾からコピーと置換を開始します.すべての文字が1回しか移動しないため,このアルゴリズムの時間効率は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;
}