这个题这样做
先看栈空吗,栈空就放元素,不空判断栈顶元素和当前的字符是否一样,若一样,就不进栈,往后遍历,并弹出栈顶元素
现在栈里面的元素就是我们需要的,但是这是逆序的,我们需要把他存在一个链表里,然后逆置,打印即可
上代码
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String str=in.nextLine(); func(str); } } public static void func(String str){ Stack<Character> stack=new Stack<>(); List<Character> list=new ArrayList<>(); for(int i=0;i<str.length();i++){ char ch=str.charAt(i); if(stack.isEmpty()||ch!=stack.peek()){ stack.push(ch); }else{ stack.pop(); } } if(stack.isEmpty()){ System.out.print("0"); }else{ while(!stack.isEmpty()){ list.add(stack.pop()); } } Collections.reverse(list); for(int i=0;i<list.size();i++){ System.out.print(list.get(i)); } } }
这是第一种方法,还有第二种方法,我们采用StringBuilder来做
public class TestDemo { public static void main(String[] args){ Scanner in=new Scanner(System.in); while(in.hasNextLine()){ String str=in.nextLine(); StringBuilder stringBuilder=new StringBuilder(str.length()); int index=-1; for(int i=0;i<str.length();i++){ char ch=str.charAt(i); if(index==-1||ch!=stringBuilder.charAt(index)){ stringBuilder.append(ch); }else{ stringBuilder.deleteCharAt(index); index--; } } if(index==-1){ System.out.println("0"); }else{ System.out.println(stringBuilder); } } } }
用到StringBuilder就避免了逆置