1 回答

TA貢獻1775條經驗 獲得超11個贊
您可以使用 achar[]
比使用 a 更快地執行此操作,StringBuilder
因為:
a
StringBuilder
只是 a 的包裝器char[]
,所以它不可能更快。間接意味著它會更慢。您確切地知道結果將持續多長時間,因此您可以分配
char[]
您需要的最小尺寸。使用 aStringBuilder
,您可以預先確定它的大小,但是使用兩個StringBuilder
s 則不能完全確定大小,因此您要么必須過度分配長度(例如,使兩者的長度都與 相同chars
),要么依靠StringBuilder
內部調整自身大?。ㄟ@會更慢比不;它使用更多的內存)。
我的想法是使用兩個整數指針指向您將在字符串中寫入 char 的下一個位置:一個從數組的開頭開始,另一個從末尾開始;當您通過輸入進行操作時,兩個指針將靠得更近。
處理完整個輸入后,結果數組中與“結束指針”對應的部分將向后,因此將其反轉。
你可以這樣做:
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);
添加回答
舉報