1047. Remove All Adjacent Duplicates In String(删除字符串中的所有相邻重复项)
链接:https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/
题目:
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
示例:
输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
提示:
1 <= S.length <= 20000
S 仅由小写英文字母组成。
思路:
我这里借助了栈,把字母塞进去,如果下一个和上一个相同就出栈,不然就入栈,最后借助stringbuffer转置一下,生成字符串。内存超过100%,但是时间超过30%,就很烦。
(idea改变了我的代码规范.......)
代码:
1 public static String removeDuplicates(String S) { 2 char[] ch = S.toCharArray(); 3 Stack stack = new Stack(); 4 int i = 0; 5 while (i < ch.length) { 6 if (stack.empty()) { 7 stack.push(ch[i]); 8 } else if (stack.peek().equals(ch[i])) { 9 stack.pop(); 10 } else { 11 stack.push(ch[i]); 12 } 13 i++; 14 } 15 16 StringBuilder sb = new StringBuilder(); 17 while (!stack.empty()) { 18 sb.append(stack.pop()); 19 } 20 return sb.reverse().toString(); 21 }