4.問題への解決策「安全オファーを証明するために、」スペースを交換してください----

タイトル

、として置換文字列にスペースの各機能を実装してください「20%。」

あなたは、入力文字列の最大長が1000であると仮定することができます。
出力1000は、文字列の長さよりも大きくてもよいことに留意されたいです。

サンプル
入力:「我々は満足しています。」

出力: "我々%20アール%20happy。"

アルゴリズムの考え方

一般的な考え方は、彼らがある場合は、それが設定され、その後、二つの空間を移動するすべてのデータスペースの後に、前後に横断するある「20%。」しかし、それはあまりにも多くのデータは、時間の複雑さの数を増やすために移動しますので。
CountOfBlank最初countOfBlank * N + 2である新しい文字列の長さに到達するスペースの数を計算し、新しい長さに文字列の長さを設定してもよいです。バックトラバーサル文字列から、文字を移動させることによって、続いて、文字が順次で満たされた空間、発生し、最終的な位置にコピーされ、「20%」。
時間計算量はO(N)であり、nは文字列の長さであります

コードの実装

class Solution {
    public String replaceSpaces(StringBuffer str) {
        if (str == null) return null;

        int countOfBlank = 0;
        int oldLength = str.length();
        for(int i=0; i<str.length(); i++) {
            if (str.charAt(i) == ' ') countOfBlank++;
        }

        int newLength = str.length() + 2 * countOfBlank;
        str.setLength(newLength);
        int oldIndex = oldLength - 1;
        int newIndex = newLength - 1;
        //从后往前遍历
        while (oldIndex >= 0 && newIndex >= 0) {
            if (str.charAt(oldIndex) == ' ') {
                str.setCharAt(newIndex--, '0');
                str.setCharAt(newIndex--, '2');
                str.setCharAt(newIndex--, '%');
                 
            } else {
                str.setCharAt(newIndex, str.charAt(oldIndex));
                newIndex--;
            }
            oldIndex--;
        }

        return str.toString();
    }
}

おすすめ

転載: www.cnblogs.com/TatuCz/p/11115433.html