> 文档中心 > 『牛客|每日一题』点击消除

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


👨‍🎓作者简介:一位喜欢写作,计科专业大二菜鸟

🏡个人主页:starry陆离

🕒首发日期:2022年7月25日星期一

🌌上期文章:『牛客|每日一题』 栈的压入、弹出序列_

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

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

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

在这里插入图片描述

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

  • 1.每日一题
  • 2.解题思路
    • 2.1思路分析
    • 2.2核心代码
    • 2.3思路拓展

1.每日一题

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

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

2.解题思路

2.1思路分析

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

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

2.2核心代码

import java.util.Scanner;import java.util.Stack;public class Main5 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//获取输入String s=scanner.next();//辅助栈Stack<Character>stk=new Stack<Character>();//遍历字符串,当前字符与栈顶不相等就入栈,相等则栈顶元素出栈for(int i=0;i<s.length();++i) {char a=s.charAt(i);if(stk.isEmpty()||a!=stk.peek()) {stk.push(a);}else if(a==stk.peek()) {stk.pop();}}//输出处理//栈空说明最终是空串,输出0if(stk.isEmpty()) {System.out.println("0");}else {//如果不是空串就再引入一个栈来逆置字符输出Stack<Character>stk2=new Stack<Character>();while(!stk.isEmpty()) {stk2.push(stk.pop());}while(!stk2.isEmpty()) {System.out.print(stk2.pop());}}scanner.close();}}

2.3思路拓展

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

/** * @author starry */import java.util.Scanner;public class Main51 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String s=scanner.next();int len=s.length();//用StringBuffer拼接字符串,删除字符串来模拟入栈,出栈StringBuffer sbf=new StringBuffer(len);//index表示“栈顶”元素下标。初始栈空,下标为-1int index=-1;//遍历字符串for(int i=0;i<len;++i) {//当前字符char ch=s.charAt(i);//“栈”为空或者当前元素与“栈顶”元素不等,则入栈,并且“栈顶”下标++if(index==-1||ch!=sbf.charAt(index)) {sbf.append(ch);index++;}else {//当前元素与“栈顶”元素相等,“栈顶”元素出栈,并且“栈顶”下标减1sbf.deleteCharAt(index);index--;}}if(index==-1) {System.out.println("0");}else {System.out.println(sbf);}scanner.close();//ahoy-starry}}

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

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

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

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