题解 | #点击消除#

点击消除

https://www.nowcoder.com/practice/8d3643ec29654cf8908b5cf3a0479fd5

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

🏡个人主页:starry陆离
如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

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

1.每日一题

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

image-20220725161341381

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();
            }
        }
        //输出处理
        //栈空说明最终是空串,输出0
        if(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表示“栈顶”元素下标。初始栈空,下标为-1
        int 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 {
                //当前元素与“栈顶”元素相等,“栈顶”元素出栈,并且“栈顶”下标减1
                sbf.deleteCharAt(index);
                index--;
            }
        }
        if(index==-1) {
            System.out.println("0");
        }else {
            System.out.println(sbf);
        }
        scanner.close();
//ahoy-starry
    }

}

image-20220725160905362

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

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

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

全部评论

相关推荐

小红书 后端开发 总包n+8w+期权
点赞 评论 收藏
分享
美丽的查理斯不讲武德:包kpi的啊,感觉虾皮一点hc都没有
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
7
收藏
分享
牛客网
牛客企业服务