问题---点击消除

简介: 问题---点击消除

描述

牛牛拿到了一个字符串

他每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串"abbc"点击后可以生成"ac"。

但相同而不相邻、不相同的相邻字母都是不可以被消除的。

牛牛想把字符串变得尽可能短。他想知道,当他点击了足够多次之后,字符串的最终形态是什么?

输入描述:

一个字符串,仅由小写字母组成。(字符串长度不大于300000)

输出描述:

一个字符串,为“点击消除”后的最终形态。若最终的字符串为空串,则输出0。

public class Main {
    public static void main(String[] args) {
        //获取控制台输入字符串
        Scanner in = new Scanner(System.in);
        //将获取的字符串转换为字符数组
        char[] si = in.nextLine().toCharArray();
        //调用方法进行消除
        erase(si);
    }
    public static void erase(char[] si) {
        //声明辅助栈
        Stack<Character> sin = new Stack<>();
        //对字符数组进行遍历
        for (int i = 0; i < si.length; i++) {
            //如果栈不为空且栈顶元素和当前元素相等,则将栈顶元素出栈
            if(!sin.isEmpty()&&sin.peek()==si[i]){
                sin.pop();
            }else{
                //将元素入栈
                sin.push(si[i]);
            }
        }
        //遍历完后,判断栈是否为空
        if (sin.isEmpty()) {
             System.out.print(0);
             //不为空就遍历输出栈中的元素
        } else {
            for (int i = 0; i < sin.size(); i++) {
                //利用栈中的get方法获取元素
                System.out.print(sin.get(i));
            }
        }
    }

本次实现,主要的还是用栈来解决这个问题,将字符串转换为字符数组,然后用一个for循环来处理,若栈为空就将本次元素加入,不为空就将本次元素和栈顶元素比较,如果相同则取出栈顶元素,不相同就将本次元素加入栈中。遍历完了之后,再看栈中是否还有元素,如果有就遍历输出栈中元素!!!

相关文章
|
6天前
|
数据安全/隐私保护
自动阅读---秘乐辅助专业版大更新
自动阅读---秘乐辅助专业版大更新
20 0
自动阅读---秘乐辅助专业版大更新
禁止右键,禁止复制,禁止拖动图片demo效果示例(整理)
禁止右键,禁止复制,禁止拖动图片demo效果示例(整理)
|
9月前
win11取消右键菜单折叠恢复经典传统菜单模式方法解决
win11取消右键菜单折叠恢复经典传统菜单模式方法解决
441 0
|
存储 iOS开发
出现下图提示是什么原因呢?
iOS打包被拒,提示错误消息,账号有问题,呢是什么原因
|
前端开发
前端工作总结122-无法选中的状态一定要绑定在select上面
前端工作总结122-无法选中的状态一定要绑定在select上面
53 0
|
前端开发
前端工作小结87-点击tab执行切换
前端工作小结87-点击tab执行切换
65 0
前端工作小结87-点击tab执行切换
|
前端开发
前端工作总结107-修改记录取消文本提示ele提示
前端工作总结107-修改记录取消文本提示ele提示
98 0
|
前端开发
前端工作总结108-修改新增按钮显示逻辑
前端工作总结108-修改新增按钮显示逻辑
85 0
前端工作总结108-修改新增按钮显示逻辑
医学四视图-007-增加按钮,增加文档提示
医学四视图-007-增加按钮,增加文档提示
256 0
医学四视图-007-增加按钮,增加文档提示