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循环来遍历,需要注意遍历完要把栈顶元素出栈,我被这一点卡过



京公网安备 11010502036488号