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只接收一行字符串不含回车键;