LeetCode——1047. 删除字符串中的所有相邻重复项

题目描述:

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

提示:

  • 1 <= S.length <= 20000
  • S 仅由小写英文字母组成。

示例:

  • 输入:“abbaca”
  • 输出:“ca”
  • 解释:
    例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所以最后的字符串为 “ca”。

代码如下:

class Solution {
    
    
    public String removeDuplicates(String S) {
    
    
        int n = S.length();
        char[] ch = S.toCharArray();
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < n; i++) {
    
    
            if (stack.isEmpty() || ch[i] != stack.peek()) {
    
    
                stack.push(ch[i]);
            } else {
    
    
                stack.pop();
            }
        }
        StringBuilder builder = new StringBuilder();
        for (Character c : stack) {
    
    
            builder.append(c);
        }
        return builder.toString();
    }
}

执行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/FYPPPP/article/details/114267802