原题链接 首先定义一个ArrayDeque 类型的deque依次取出S中的字符进行判断,使用栈进行操作,当栈顶元素不是当前的ch时,将其加入,若和当前的元素相等,则将当前元素pop出检测完之后,当deque非空的时候,使用字符串拼接,将后面pop出的元素,链接到之前元素的前面,实现了将deque中的元素,倒叙输出;例如:deque中的元素是 c a ,则首先pop出 a ,然后执行 deque.pop() + str ,将c 链接到str的前面,也就是 c a二刷:注意字符串拼接时的顺序 class Solution { public String removeDuplicates(String S) { //ArrayDeque会比LinkedList在除了删除元素这一点外会快一点 ArrayDeque<Character> deque = new ArrayDeque<>(); char ch; for (int i = 0; i < S.length(); i++) { ch = S.charAt(i); if (deque.isEmpty() || deque.peek() != ch) { deque.push(ch); } else { deque.pop(); } } String str = ""; //剩余的元素即为不重复的元素 现在栈里的元素是ca,首先将a pop出来,则str="a" 之后将c pop出来,链接到原来str 的前面 while (!deque.isEmpty()) { str = deque.pop() + str; } return str; } }