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

【百日算法计划】:每日一题,见证成长(020)

题目

删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
输入:“abbaca”
输出:“ca”

思路

  • 栈的解法,判断字符与栈顶元素是否相等,相等则弹出栈顶元素,否则将字符押入栈(注意:不需要构造对象计数)
public class Code09 {
    //栈解法
    public String removeDuplicates(String s) {
        if (s == null) return null;
        Stack<Character> stack = new Stack<>();
        int n = s.length();
        for (int i = 0; i < n; i++) { //顺序处理每个字符
            char c = s.charAt(i);
            if (!stack.isEmpty() && c == stack.peek()){
                stack.pop();
            } else {
                stack.push(c);
            }
        }
        int size = stack.size();
        char[] chars = new char[size];
        for (int i = size-1; i >= 0; i--) {
            chars[i] = stack.pop();
        }
        String s1 = String.valueOf(chars);
        return s1;
    }   
}

http://www.kler.cn/a/319678.html

相关文章:

  • 论文精读(笔记)
  • 用 Python 从零开始创建神经网络(三):添加层级(Adding Layers)
  • 机器学习、深度学习面试知识点汇总
  • java的JJWT 0.91在jdk21中报错的解决方法
  • 前端系统设计面试题(二)Javascript\Vue
  • 用友U8-Cloud uapbd.refdef.query sql注入漏洞复现
  • 如何查看线程
  • 项目第一弹:RabbitMQ介绍
  • C语言之预处理详解(完结撒花)
  • JAVA链表
  • 网站在线客服插件配置
  • Stable Diffusion的高分辨率修复(Hires.fix)
  • 嵌入式单片机中can总线调试方法
  • 漏洞扫描工具使用
  • vulnhub(11):derpnstink(hydra爆破用户名和密码、验证的文件上传)
  • 多表查询。
  • 以太坊客户端Geth的介绍与搭建
  • (PySpark)RDD实验实战——取一个数组的中间值
  • 求一个数的因子数(c语言)
  • C语言 | Leetcode C语言题解之第416题分割等和子集
  • 自然场景文本定位系统源码分享
  • MFC -文件类控件
  • 暑期内卷!就练这400页软件测试面试题(附答案解析)!
  • fmql之ubuntu添加dhcp服务
  • 函数题 7-7 12-24小时制【PAT】
  • Postgresql一行命令备份(pg_dump版)