DAY 50 leetcode 1047--栈和队列.删除字符串中的所有相邻重复项
题号1047
给出由小写字母组成的字符串 s
,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 s
上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
import java.util.ArrayDeque;
import java.util.Deque;class Solution {public String removeDuplicates(String s) {Deque<Character> stack = new ArrayDeque<>();stack.push(s.charAt(0)); // 使用push而不是add,以符合栈的常用方法for (int i = 1; i < s.length(); i++) {if (!stack.isEmpty() && s.charAt(i) == stack.peek()) {stack.pop(); // 如果当前字符与栈顶字符相同,弹出栈顶字符} else {stack.push(s.charAt(i)); // 否则,将当前字符推入栈中}}StringBuilder sb = new StringBuilder();while (!stack.isEmpty()) {sb.append(stack.pop()); // 将栈中的字符取出并添加到StringBuilder中}return sb.reverse().toString(); // 在返回前反转StringBuilder中的字符串}
}
重点:注意返回时将字符串反转,因为栈