刪除字符串中的所有相鄰重復(fù)項
給出由小寫字母組成的字符串 S
逻锐,重復(fù)項刪除操作會選擇兩個相鄰且相同的字母,并刪除它們雕薪。
在 S 上反復(fù)執(zhí)行重復(fù)項刪除操作昧诱,直到無法繼續(xù)刪除。
在完成所有重復(fù)項刪除操作后返回最終的字符串所袁。答案保證唯一盏档。
示例:
輸入:"abbaca"
輸出:"ca"
解釋:
例如,在 "abbaca" 中燥爷,我們可以刪除 "bb" 由于兩字母相鄰且相同蜈亩,這是此時唯一可以執(zhí)行刪除操作的重復(fù)項懦窘。之后我們得到字符串 "aaca",其中又只有 "aa" 可以執(zhí)行重復(fù)項刪除操作稚配,所以最后的字符串為 "ca"畅涂。
public String removeDuplicates(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!stack.isEmpty() && stack.peek() == c) {
stack.pop();
} else {
stack.push(c);
}
}
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
return sb.reverse().toString();
}
用StringBuilder做棧:
public String removeDuplicates(String s) {
StringBuilder sb = new StringBuilder();
int top = -1;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (top != -1 && sb.charAt(top) == c) {
sb.deleteCharAt(top);
top--;
} else {
sb.append(c);
top++;
}
}
return sb.toString();
}