去除重复字母(Java实现)

2023-05-16

题目 去除重复字母

给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。

示例1

输入:s = “bcabc”
输出:“abc”

示例2

输入:s = “cbacdcbc”
输出:“acdb”

数据范围

1 <= s.length <= 104
s 由小写英文字母组成

来源:力扣(LeetCode)
https://leetcode-cn.com/problems/remove-duplicate-letters/

代码

/*
 * 算法思想
 * 当字典序最小时,即12341 12351 主要看4,5的位置
 * 用栈存储,当栈空时直接入栈
 * 栈不为空时,
 * 	若栈中包含当前要入栈的元素直接跳到下一次循环。(结果字符串每个字符只含有一次)
 * 	若当前要入栈的字母比栈顶字母大时,考虑是否栈顶元素出栈
 * 	若栈顶元素在剩余字符串中仍然存在,那么就可以出栈,出栈后继续判断新的栈顶元素是否出栈。
 */
import java.util.Stack;

public class RemoveDuplicateLetters {

    public static String removeDuplicateLetters(String s){
        Stack<Character> stack = new Stack<Character>();
            for (int i = 0; i < s.length(); i++) {
                char c=s.charAt(i);
                if(stack.contains(c))
                    continue;
                while(!stack.isEmpty() && stack.peek()>c && s.indexOf(stack.peek(),i)!=-1)
                    stack.pop();
                stack.push(c);
            }
            char chars[]=new char[stack.size()];
            for (int i = 0; i < stack.size(); i++) {
                chars[i]=stack.get(i);
            }
            return new String(chars);
    }

    public static void main(String[] args) {
        String string = "bbcaac";
        System.out.println(removeDuplicateLetters(string));
    }
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

去除重复字母(Java实现) 的相关文章

  • SimpleDateFormat类 格式化日期

    功能 xff1a 格式化和解析日期 将Date类型的日期格式化成我们需要的日期类型一般是 字符串类型将字符串类的日期再转回来 用到两个方法 format Date date xff1a 将date型转换成特定格式的字符串 parse Str
  • 队列(Java实现)

    1 1应用场景 银行排队 xff1a 1 2基本介绍 特点 队列是一个有序列表 xff0c 可以用数组或是链表来实现 遵循先入先出的原则 即 xff1a 先存入队列的数据 xff0c 要先取出 后存入的要后取出 示意图 解释 MaxSize
  • IO字节流读取文本中文乱码

    1 1问题说明 我们都知道字符流适用于读取文本 xff0c 而字节流能读取文本 照片 视频等 xff0c 但是用字节流读取文本到我们程序的控制台中会出现中文乱码的情况 xff0c 如下图 我的文本中的数据是 生活很简单 xff0c 过了今天
  • glibc所安装的工具程序

    catchsegv 当程序发生segmentation fault的时候 用来建立一个 堆栈跟踪 gencat 建立消息列表 getconf 针对文件系统的指定变量显示其系统设置值 getent 从 系统管理数据库获取一个条目 glibcb
  • 单链表(java实现)

    1 1 链表 Linked List 介绍 链表是有序的列表 xff0c 但是它在内存中是存储如下 链表是以节点的方式来存储 是链式存储每个节点包含 data 域 xff0c next 域 xff1a 指向下一个节点 如图 xff1a 发现
  • prepareStatement的使用

    1 1prepareStatement解决sql注入的问题 span class token comment 演示sql注入的安全问题 span span class token keyword public span static voi
  • 动态sql

    1 什么是动态sql sql的内容是变化的 可以根据条件获取到不同的sql语句 主要是where部分发生变化 动态sql的实现 使用的是mybatis提供的标签 2 为什么使用动态sql 使用动态sql可以解决某些功能的使用 例如使用条件查
  • 分页插件--PageHelper

    mybatis的分页查询可以通过PageHelper插件实现 在数据库中我们使用分页查询的sql语句为 xff1a select from 表名 where 条件 limit page 1 pageSize pageSize page 当前
  • springboot框架

    1 什么是springboot框架 Spring是一个开源框架 xff0c Spring是于2003 年兴起的一个轻量级的Java 开发框架 xff0c 由Rod Johnson 在其著作 Expert One On One J2EE De
  • Elasticsearch入门及整合springboot

    1 Elasticsearch概述 1 1 搜索是什么 概念 xff1a 用户输入想要的关键词 xff0c 返回含有该关键词的所有信息 场景 xff1a 1 互联网搜索 xff1a 谷歌 百度 各种新闻首页 2 站内搜索 xff08 垂直搜
  • springboot+mybatis-plus+vue完成微信支付(前后端分离)

    微信支付的学习链接 https pay weixin qq com wiki doc api native php chapter 61 9 1 一 数据库准备 t order表 主要完成订单查询 span class token comm
  • springcloud学习笔记

    第一章 微服务的介绍 1 1系统架构演变 随着互联网的发展 xff0c 网站应用的规模也在不断的扩大 xff0c 进而导致系统架构也在不断的进行变化 从互联网早起到现在 xff0c 系统架构大体经历了下面几个过程 单体应用架构 gt 垂直应
  • windows2016 AD域修改密码策略

    1 服务器管理器 gt 工具 gt 组策略管理 2 域 gt 域名 gt 组策略对象 gt Default Domain Policy 域 gt 域名 gt Default Domain Policy同样可以 gt 右键 gt 编辑 3 计
  • 生产者和消费者的三种实现方式(Java)

    什么是生产者消费者问题 生产者消费者问题 xff08 英语 xff1a Producer consumer problem xff09 xff0c 也称有限缓冲问题是一个多线程同步问题的经典案例 该问题描述了共享固定大小缓冲区的两个线程 即
  • 设置桌面GNOME或者KDE

    一 设置GNOME或者KDE为默认的启动桌面环境 方法1 xff1a 修改 etc sysconfig desktop xff0c 根据需要将 DESKTOP 后面的内容改为KDE或GNOME 方法2 xff1a 在当前用户目录下建立 xi
  • windows11安装wsl2遇到的问题:sudo apt-get update报错已解决

    开始是因为在windows11使用mmdetection报错很多 xff0c 我看一些教程说mmcv是只支持linux xff0c 支持windows版本较少 xff0c 所以很难和torch cuda匹配上 xff0c 所以报错较多难安装
  • Ubuntu下AndroidStudio无法启动,报错Missing essential plugin: org.jetbrains.android Please reinstall Android

    Ubuntu下AndroidStudio无法启动 xff0c 报错Missing essential plugin org jetbrains android Please reinstall Android Studio from scr
  • Zookeeper应用场景(五) 分布式锁

    文章目录 分布式锁排他锁 定义锁 获取锁 释放锁 共享锁 定义锁 获取锁 释放锁 弊端 xff1a 群效应改进后的分布式锁实现 分布式锁 分布式锁是控制分布式系统之间同步访问共享资源的 种 式 如果不同的系统或是同 个系统的不同主机之间共享
  • Pr入门学习之选择GPU加速

    Pr入门学习之选择GPU加速 问题解决办法 近期因为需要用到Pr进行视频剪辑 xff0c 所以进行以下Pr学习 xff0c 记录学习过程中遇到的问题 问题 Pr导出视频时太慢 xff0c 后来发现没选择Gpu加速 xff0c 白白浪费了这个
  • HuggingFace简明教程

    视频链接 xff1a HuggingFace简明教程 BERT中文模型实战示例 NLP预训练模型 Transformers类库 datasets类库快速入门 哔哩哔哩 bilibili 1 huggingface简介与安装 什么是huggi

随机推荐