题解 | 吐泡泡

吐泡泡

https://www.nowcoder.com/practice/f86fa2221c094b3d8d1fc79bae450d96

import java.util.Scanner;
import java.util.Stack;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            char[] bubbles = in.nextLine().toCharArray();
            Stack<Character> stack = new Stack<Character>();
            for (Character ch : bubbles) {
                if (stack.isEmpty()) { //栈为空直接push进ch
                    stack.push(ch);
                } else if (stack.peek() != ch) { // 栈顶与ch不一样,直接push进ch
                    stack.push(ch);
                } else { // 栈顶与ch一样,全为O或者全为o
                    if (stack.peek() == 'O') { // 如果全为O
                        stack.pop(); // 两个O直接爆炸,pop栈顶O即可
                    } else { // 全为o,分情况讨论
                        char currentBubble = stack.pop();// 先把这个o拿出来存着
                        if (!stack.isEmpty()) { // 如果拿了这个o后栈不为空,即这个拿出来的o前面还有元素
                            char previousBubble = stack.pop();
                            if (previousBubble == 'O') { // 如果这个前面的元素是O
                                continue; // 那么ch将与currentBubble合成O,这个合成的O将与previousBubble即O一起爆炸,所以什么都不做
                            } else { // 如果这个前面的元素是o
                                stack.push(previousBubble); // 将拿出来的previousBubble即o再push回去
                                stack.push('O');// ch将与currentcurrentBubble合成O,o与O不会爆炸,所以push进这个O
                            }
                        } else { // 如果拿了这个o后栈为空了,那么两个o直接合成O,push进栈即可
                            stack.push('O');
                        }
                    }
                }
            }
            StringBuilder sb = new StringBuilder();
            while (!stack.isEmpty()) {
                sb.append(stack.pop());
            }
            System.out.println(sb.reverse().toString());
        }
    }
}

注意栈顶为小o,下一个ch也是小o时的情况,两个小o合成大O,如果此时前面还是大O,需要爆炸。

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-29 17:30
找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 18:13
点赞 评论 收藏
分享
06-16 15:04
黑龙江大学 Java
零OFFER战士:另一个版本查看图片
点赞 评论 收藏
分享
一表renzha:手写数字识别就是一个作业而已
点赞 评论 收藏
分享
07-01 19:00
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务