import java.util.ArrayDeque; import java.util.Deque; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Deque<Character> stackDeque=new ArrayDeque<>(); Scanner scanner=new Scanner(System.in); int t=scanner.nextInt(); for (int i = 0; i < t; i++) { String string=scanner.next(); for (int j = 0; j < string.length(); j++) { char c=string.charAt(j); if(stackDeque.isEmpty()) { stackDeque.push(c); }else { char a=stackDeque.peek(); if(a==c) { if(c=='o') { stackDeque.pop(); if(stackDeque.isEmpty()) { stackDeque.push('O'); }else { a=stackDeque.peek(); if(a=='O') { stackDeque.pop(); }else { stackDeque.push('O'); } } }else if(c=='O') { stackDeque.pop(); } }else { stackDeque.push(c); } } } StringBuilder sBuilder=new StringBuilder(); for (Character d : stackDeque) { sBuilder.append(d); stackDeque.pop(); } System.out.println(sBuilder.reverse()); } } }
感觉我做得有点复杂了,其实就是拿着新字符去跟栈里面的栈顶元素比对,如果一样就进行相应的操作,不一样就直接压栈,应当注意,这道题输出时,要求是正序输出,而栈的正常输出方式为逆序,所以我们要想办法解决这个问题,我才用的是StringBuilder,它的reverse可以很好地解决该问题,还有就是,如果采用增强for循环来遍历,需要注意遍历完要把栈顶元素出栈,我被这一点卡过