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