当前位置: 首页 > 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

相关文章:

  • ASP.NET Core - 配置系统之自定义配置提供程序
  • Linux提权-02 sudo提权
  • Transformer创新模型!Transformer+BO-SVR多变量回归预测,添加气泡图、散点密度图(Matlab)
  • 【蓝桥杯】Python算法——求逆元的两种算法
  • RV1126+FFMPEG推流项目(6)视频码率及其码率控制方式
  • 【时时三省】(C语言基础)柔性数组的使用
  • 如何查看线程
  • 项目第一弹: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版)