LeetCode--1047. 删除字符串中的所有相邻重复项(栈和队列)
题目描述给出由小写字母组成的字符串s重复项删除操作会选择两个相邻且相同的字母并删除它们。在s上反复执行重复项删除操作直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例输入abbaca 输出ca 解释 例如在 abbaca 中我们可以删除 bb 由于两字母相邻且相同这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 aaca其中又只有 aa 可以执行重复项删除操作所以最后的字符串为 ca。提示1 s.length 105s仅由小写英文字母组成。解题思路与20.有效的括号类似匹配即将进栈的元素与栈顶元素即可。代码classSolution{publicStringremoveDuplicates(Strings){// 转换成字符数组char[]arrays.toCharArray();// 使用双端队列存储DequeCharacterdequenewLinkedList();for(charch:array){// 队列非空时检查栈顶元素if(!deque.isEmpty()chdeque.peek()){// 匹配则出栈deque.pop();}else{// 未匹配则压栈deque.push(ch);}}// 用新字符数组输出char[]resultnewchar[deque.size()];for(intiresult.length-1;i0;i--){result[i]deque.peek();deque.pop();}returnnewString(result);}}