当前位置: 首页 > news >正文

蓝桥杯关于栈这个数据结构的一个算法题目

文章目录

  • 1.题目概述解释
  • 2.思路分析
  • 3.代码解析

1.题目概述解释

找出来这个字符串里面重复出现的字符,类似于这个消消乐的游戏;

示例一里面的这个bb是连续的并且是一样的这个字符,因此删除bb,删除之后发现这个aa有一次相邻了,所以这个aa也需要删除,以此类推下去,最后返回的是我们的这个字符串里面的剩余的内容;

这个可以使用栈这个数据结构进行模拟,下面简单的说明一下;

image-20250320195040291

2.思路分析

  1. 把a放到栈里面去;
  2. b放进去,发现和这个时候栈顶元素a不一致,直接进入;
  3. 第三个元素放进去,发现这个时候栈顶的元素和他一样,这个时候删除的是我们的栈顶元素,也就是弹出栈顶元素;
  4. 这个时候栈里面只剩下了a元素;
  5. c进入,发现和这个时候的栈顶元素不一样,直接进入;
  6. 第二个c进去的时候发现等于栈顶元素,此时栈顶元素弹出即可;
  7. 这个时候再次只剩下了a元素在我们的容器里面;
  8. 这个时候进来了一个a,和我们的栈顶元素一样,弹出;
  9. 这个时候的容器里面没有任何元素了;
  10. bd按照上面的这个过程依次进入,最后这个容器里面的这个bd就是我们需要返回的;
  11. 上面的这个就是使用栈进行模拟的整个流程,接下来我们看一下这个编码实现;
  12. 编码实现的过程中,我们是使用的数组这个进行模拟,不需要真实的栈,让这个新的元素和我们的这个字符串里面的最后一个元素比较,最后这个字符串里面的元素就是我们需要返回的内容;

image-20250320200515303

3.代码解析

  1. ret用来存储我们的最后结果;
  2. 因为需要遍历,所以我们把这个参数string转换为字符数组,这样才可以使用范围for进行遍历数组;
  3. for循环里面判断这个ret里面的元素个数(不可以是空的),因为我们后面有-1的操作,空的话不用比较,直接放进去就可以了;
  4. 不是空的话,就让这个新的元素和我们的这个字符串里面的最后一个元素比较,相同就弹出,不同就append进去;
  5. 最后把这个ret转换为数组就可以了;
class Solution {
    public String removeDuplicates(String _s) {
        StringBuffer ret = new StringBuffer();
        char[] s=_s.toCharArray();
        for(char ch:s){
            if(ret.length()>0&&ch==ret.charAt(ret.length()-1)){
                ret.deleteCharAt(ret.length()-1);
            }
            else{
                ret.append(ch);
            }
        }
        return ret.toString();
    }
}
http://www.dtcms.com/a/79787.html

相关文章:

  • 【自学笔记】NFT基础知识点总览-持续更新
  • ⭐算法OJ⭐二叉树的后序遍历【树的遍历】(C++实现)Binary Tree Postorder Traversal
  • Mysql-经典实战案例(4):XtraBackup+binlog恢复实战
  • Python 位运算符大全
  • 【架构】单体架构 vs 微服务架构:如何选择最适合你的技术方案?
  • 推荐HttpClient工具类
  • 2025.3.20总结
  • 暗光增强技术研究进展与产品落地综合分析(2023-2025)
  • dfs(二十二)78. 子集
  • 自动驾驶AEB误触发率评估的必要测试里程估计
  • 网络安全技术分析:攻防演进、核心技术与未来挑战
  • SpringBoot3+Vue3开发学生成绩管理系统
  • Milvus vs. ElasticSearch:向量库检索性能测试
  • 中断服务函数和回调函数的理解
  • 介绍一下TiDB、RocksDb、levelDB、LSM 树、SSTable。
  • 2025年R1 快开门式压力容器操作证考试题目及答案解析
  • 【“缘起”:万物依条件而生】
  • dart学习记录4(循环、分钟、错误处理)
  • 【AI News | 20250320】每日AI进展
  • MyBatis 执行流程详解:一级缓存与二级缓存深度解析
  • QT并发编程进阶--线程安全与同步技巧详解
  • css-grid布局
  • 日期类的实现
  • 基于复杂的商业和政策信息构建GraphRAG,并结合通义千问大模型进行问答的应用场景
  • 美团Leaf分布式ID实战:深入解析雪花算法原理与应用
  • 网络空间安全(38)Windows/Linux权限
  • 算法刷题记录——LeetCode篇(1) [第1~100题](持续更新)
  • yarn install 出现certificate has expired报错问题
  • 读博士论文(未完待续)
  • (九)Dart 中的 Map(映射)