1 回答

TA貢獻1775條經(jīng)驗 獲得超11個贊
您可以使用 achar[]
比使用 a 更快地執(zhí)行此操作,StringBuilder
因為:
a
StringBuilder
只是 a 的包裝器char[]
,所以它不可能更快。間接意味著它會更慢。您確切地知道結(jié)果將持續(xù)多長時間,因此您可以分配
char[]
您需要的最小尺寸。使用 aStringBuilder
,您可以預(yù)先確定它的大小,但是使用兩個StringBuilder
s 則不能完全確定大小,因此您要么必須過度分配長度(例如,使兩者的長度都與 相同chars
),要么依靠StringBuilder
內(nèi)部調(diào)整自身大小(這會更慢比不;它使用更多的內(nèi)存)。
我的想法是使用兩個整數(shù)指針指向您將在字符串中寫入 char 的下一個位置:一個從數(shù)組的開頭開始,另一個從末尾開始;當(dāng)您通過輸入進行操作時,兩個指針將靠得更近。
處理完整個輸入后,結(jié)果數(shù)組中與“結(jié)束指針”對應(yīng)的部分將向后,因此將其反轉(zhuǎn)。
你可以這樣做:
char[] newChars = new char[chars.length];
int left = 0;
int right = chars.length;
for (char c : chars) {
if (c == '!') {
newChars[left++] = c;
} else {
newChars[--right] = c;
}
}
// Reverse the "otherSymbols".
for (int i = right, j = newChars.length - 1; i < j; ++i, --j) {
char tmp = newChars[i];
newChars[i] = newChars[j];
newChars[j] = tmp;
}
return new String(newChars);
添加回答
舉報