『牛客|每日一题』AB5 点击消除

简介: 基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦 https://www.nowcoder.com/link/pc_csdncpt_ll_sf

如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦



1.每日一题

原题链接:传送门-》戳我

网络异常,图片无法展示
|

2.解题思路

2.1思路分析

因为每次消除的是相邻且相同的字符,所以我们考虑用栈:遍历字符串,每次遇到与栈顶相同的字符就栈顶元素出栈,栈为空或者当前字符与栈顶元素不等,就入栈

  • step 1:引入辅助栈stk,遍历字符串,每次遇到与栈顶相同的字符就栈顶元素出栈
  • step 2:栈为空或者当前字符与栈顶元素不等,就当前元素入栈
  • step 3:输出结果,栈空说明最终是空串,直接输出0
  • step 4:如果不是空串就再引入一个栈来逆置字符输出

2.2核心代码

 

 

importjava.util.Scanner;

importjava.util.Stack;

 

publicclassMain5 {

 

    publicstaticvoidmain(String[] args) {

        Scannerscanner=newScanner(System.in);

        //获取输入

        Strings=scanner.next();

        //辅助栈

        Stack<Character>stk=newStack<Character>();

        //遍历字符串,当前字符与栈顶不相等就入栈,相等则栈顶元素出栈

        for(inti=0;i<s.length();++i) {

            chara=s.charAt(i);

            if(stk.isEmpty()||a!=stk.peek()) {

                stk.push(a);

            }elseif(a==stk.peek()) {

                stk.pop();

            }

        }

        //输出处理

        //栈空说明最终是空串,输出0

        if(stk.isEmpty()) {

            System.out.println("0");

        }else {//如果不是空串就再引入一个栈来逆置字符输出

            Stack<Character>stk2=newStack<Character>();

            while(!stk.isEmpty()) {

                stk2.push(stk.pop());

            }

            while(!stk2.isEmpty()) {

                System.out.print(stk2.pop());

            }

        }

        scanner.close();

 

    }

 

}

2.3思路拓展

这一题使用java集合类中的栈其实给我们的输出带来了不便,在输出元素时还需要再引入一个辅助栈来逆置元素。更简洁的做法是直接用StringBuffer拼接字符串,删除字符串来模拟入栈,出栈。思路是一样的。

 

/**

* @author starry

*/

importjava.util.Scanner;

 

publicclassMain51 {

 

    publicstaticvoidmain(String[] args) {

        Scannerscanner=newScanner(System.in);

        Strings=scanner.next();

        intlen=s.length();

        //用StringBuffer拼接字符串,删除字符串来模拟入栈,出栈

        StringBuffersbf=newStringBuffer(len);

        //index表示“栈顶”元素下标。初始栈空,下标为-1

        intindex=-1;

        //遍历字符串

        for(inti=0;i<len;++i) {

            //当前字符

            charch=s.charAt(i);

            //“栈”为空或者当前元素与“栈顶”元素不等,则入栈,并且“栈顶”下标++

            if(index==-1||ch!=sbf.charAt(index)) {

                sbf.append(ch);

                index++;

            }else {

                //当前元素与“栈顶”元素相等,“栈顶”元素出栈,并且“栈顶”下标减1

                sbf.deleteCharAt(index);

                index--;

            }

        }

        if(index==-1) {

            System.out.println("0");

        }else {

            System.out.println(sbf);

        }

        scanner.close();

//ahoy-starry

    }

 

}

网络异常,图片无法展示
|

📚订阅专栏:『牛客刷题集锦』

🍁每日推荐:基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦)

如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦


相关文章
|
9月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-101 图形显示
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-101 图形显示
37 0
|
9月前
蓝桥备战--纪念品分组OJ532,贪心证明
蓝桥备战--纪念品分组OJ532,贪心证明
35 0
|
机器学习/深度学习 存储 人工智能
【第十四届蓝桥杯】第三期官方校内模拟赛B组C++题解(已修正完毕,均可AC100%)
文章目录 写在前面 一、字母数(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 二、列名(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 三、特殊日期(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 四、大乘积(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 ==五、最大连通==(已修正) 题目描述 解题报告 1、大体思路 2、代码详解 六、星期几(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 七、信号覆盖(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 八、清理水域(AC100%) 题目描述 解
486 0
关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事
关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事
77 0
关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事(三)
关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事(三)
76 0
|
人工智能
关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事(二)
关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事(二)
95 0
(思维)(必要做题步骤)(皮卡丘与 Codeforces )D - 先来签个到
(思维)(必要做题步骤)(皮卡丘与 Codeforces )D - 先来签个到
112 0
|
C++ ice Perl
【力扣·每日一题】748. 最短补全词(C++ 模拟)
【力扣·每日一题】748. 最短补全词(C++ 模拟)
90 0
【力扣·每日一题】748. 最短补全词(C++ 模拟)
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)-1
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)
205 0
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)-1