解析:(使用栈)
题目要求:给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
示例:
输入:"abbaca"
输出:"ca"
大体思路:将string元素压入栈中,在压入的时候,判断和栈顶元素是否相等。相等则取消压入并且栈顶元素出栈。不相等才压入栈。
注意最后返回时,还要反转一下,因为栈pop()出来的顺序是反的。
代码:
class Solution {
public String removeDuplicates(String s) {
Stack<Character> stack = new Stack<>();
for (char i : s.toCharArray()) {
if (!stack.isEmpty() && stack.peek() == i) stack.pop();
else stack.push(i);
}
StringBuffer sb = new StringBuffer();
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
return sb.reverse().toString();
}
}