采用压栈和弹栈的方法,代码如下:

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        char[] ch = s.toCharArray();  //将字符串转化为char型数组,方便作为形参传入solve方法
        solve(ch);
    }
    public static void solve(char[] ch) {
        Stack<Character> st = new Stack<Character>();
        for(int i = 0; i < ch.length; i++){
            if(st.isEmpty() || ch[i] != st.peek())  //若栈不为空且ch[i]和栈顶元素不一样,ch[i]入栈
                st.push(ch[i]);
            else if(ch[i] == st.peek())  // 当ch[i]等于栈顶元素时,栈顶元素出栈
                st.pop();
        }
        if(st.isEmpty())
            System.out.println("0");  //若栈为空,直接输出0
        else {
            Stack<Character> st2 = new Stack<Character>();  //栈st不为空时,创建栈st2,让元素能按在字符串中的顺序输出
            while(!st.isEmpty())
                st2.push(st.pop());
            while(!st2.isEmpty())
                System.out.print(st2.pop());
        }
    }
}