import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
//思路:使用栈 如果重复弹出栈顶元素,否则把数据推入到栈中
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str=sc.nextLine();  //接受字符串遇到回车键(\r)结束输入
        Stack<Character> stk=new Stack<Character>();   //辅助栈

        for(int i=0;i<str.length();i++){
            if(stk.isEmpty() || str.charAt(i)!=stk.peek()){ //栈为空或者不是栈顶元素相同的可以入栈
                stk.push(str.charAt(i));  //入栈
            }else{
                stk.pop();  //不满足就移除栈中的一个元素(默认最后一个元素[-1]),并且返回该元素的值
            }
        }
        String s="";
        for(char ch:stk){  //遍历栈
           s+=ch;
        }
        if(s.isEmpty()){ //如果是空就输出0
             System.out.println(0);
        } 
       System.out.println(s);
    }
}

本题总结

1、empty()和 isEmpty()的区别:

字符串中只有isEmpty()方法,而栈中两种方法均可以实现。

2、遍历栈中元素

for(char ch:stk)

3、char与String

char表示字符,定义时用单引号,只能存储一个字符,如char c=’x’;

String表示字符串,定义时用双引号,可以存储一个或多个字符,如String name=”ikun”;

4 、sc.next()与sc.nextLine()

sc.next()输入法是不能接收:空格键(\s)、Tab键(\t)或Enter键(\r)字符

sc.nextLine是不能接收回车键的(\r),即一个sc.nextLine只接收一行字符串不含回车键;