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

84 阅读1分钟

题目

image.png

方法一 比较

  • 扫描S,往sb添加。

  • 相似做法:合并区间

    • 如果遇到重复的,就把sb最后一位删掉,用sb.deleteCharAt()
    • 没有重复,append到sb末尾
class Solution {
    public String removeDuplicates(String S) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < S.length(); i++) {
            if (sb.length() == 0 || sb.charAt(sb.length() - 1) != S.charAt(i)) {
                sb.append(S.charAt(i));
            } else {
                sb.deleteCharAt(sb.length() - 1);
            }
        }
        return sb.toString();
    }
}

方法二 用stack

class Solution {
    public String removeDuplicates(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            if (!stack.isEmpty() && s.charAt(i) == stack.peek()) {
                stack.pop();
            } else {
                stack.push(s.charAt(i));
            }
        }
        StringBuffer sb = new StringBuffer();
        while (!stack.isEmpty()) {
            sb.append(stack.pop());
        }
        return sb.reverse().toString();
    }
}