1 思路分析

因为每次消除的是相邻且相同的字符,所以我们考虑引入辅助栈stack:遍历字符串,每次遇到与栈顶相同的字符就栈顶元素出栈,栈为空或者当前字符与栈顶元素不等,就入栈

step 1:栈为空或者当前字符与栈顶元素不等,就当前元素入栈
step 2:遍历字符串,每次遇到与栈顶相同的字符就栈顶元素出栈
step 3:输出结果,栈空说明最终是空串,直接输出0
step 4:如果不是空串就再引入StringBuffer将结果拼接成一个字符串
step 5:此时StringBuffer存储的是答案的逆序,需要再reverse反转即为正确答案

2 完整代码

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

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String string = in.next();
        char[] array = string.toCharArray();
        //利用栈解决
        Stack<Character> stack = new Stack<>();
        //遍历字符数组
        for(int i = 0; i < array.length; i++){
            //如果栈为空,则直接入栈
            if(stack.isEmpty()){
                stack.push(array[i]);
            }else{
                //否则,进行判断
                if(stack.peek() == array[i]){
                    stack.pop();
                }else{
                    stack.push(array[i]);
                }
            }
        }
        //输出结果
        if(stack.isEmpty()){
            System.out.println("0");
        }else{
            StringBuffer res = new StringBuffer("");
            while(!stack.isEmpty()){
                res.append(stack.pop()+"");
            }
            System.out.println(res.reverse());
        }
        in.close();
    }
}

alt