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

例:

输入:s = "cbacdcbc"
输出:"acdb"

解析:

题目主体是去重,然后要求返回结果的字典序最小,就是在保证每个字符只出现一次的情况下,尽量使得字符串有序,即从小到大排列。

方法是设计一个栈,若栈中已存则跳过,若没有存,则先判断,栈顶元素是否可以取出,若字符串的后面字符包括栈顶元素,并且栈顶元素大于当前元素,那么就可以取出栈顶元素,然后将当前元素放入,这样就能实现局部排序,并且后续元素会进行补充。、

代码:

class Solution(object):def removeDuplicateLetters(self, s):""":type s: str:rtype: str"""n = len(s)  # 字符串长度stack = []  # 创建一个栈for i in range(n):  # 遍历字符串if s[i] in stack:  # 当前字符已经存入栈中的情况continueelse:  # 当前字符还未存入栈中while stack and stack[-1] > s[i] and stack[-1] in s[i + 1:]:  # 栈不为空且栈顶元素大于当前元素且栈顶元素存在于后续元素中(否则无法进行补充)stack.pop()  # 弹出栈顶元素stack.append(s[i])  # 对当前元素进行入栈return ''.join(stack)  # 将栈内元素连接成字符串

去除重复字母Python解法相关推荐

  1. 力扣- -去除重复字母

    力扣- -去除重复字母 文章目录 力扣- -去除重复字母 一.题目描述 二.分析 三.代码 四.问题描述 五.代码 一.题目描述 二.分析 题目的要求总结出来有三点: 要求一.要去重. 要求二.去重字 ...

  2. 20200213:去除重复字母(leetcode316)

    去除重复字母 题目 思路与算法 代码实现 题目 思路与算法 首先对字符串进行遍历,将当前字符串依次入栈, 注意入栈的条件: 新入栈的元素在栈内没有出现过,必须是未出现过的元素 新入栈的元素如果比栈顶元 ...

  3. 316. 去除重复字母

    链接:316. 去除重复字母 题解:https://leetcode-cn.com/problems/remove-duplicate-letters/solution/qu-chu-zhong-fu ...

  4. LeetCode 练习——316. 去除重复字母

    文章目录 1.题目描述 2.思路 2.1 代码 2.2 测试结果 3.总结 1.题目描述 去除重复字母 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典 ...

  5. 316 Remove Duplicate Letters 去除重复字母

    给定一个仅包含小写字母的字符串,去除重复的字母使得所有字母出现且仅出现一次.你必须保证返回结果是所有可能结果中的以字典排序的最短结果. 例如: 给定 "bcabc" 返回 &quo ...

  6. leetcode 316. Remove Duplicate Letters | 316. 去除重复字母(单调栈解法)

    题目 https://leetcode.com/problems/remove-duplicate-letters 题解 关于什么是"字典序" 字典序,换成数字更好理解一点 a:1 ...

  7. 316. Remove Duplicate Letters 去除重复字母

    给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置). 注意:该题与 1081 https://leetcode-c ...

  8. leetcode 316. 去除重复字母(单调栈)

    给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置). 注意:该题与 1081 https://leetcode-c ...

  9. LeetCode 316. 去除重复字母 / 1081. 不同字符的最小子序列(单调栈)

    文章目录 1. 题目 2. 解题 1. 题目 LC 316: 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置). ...

最新文章

  1. leetcode-142 环形链表II
  2. 如何用xmanager远程连接centos6.0的桌面
  3. linux docker运行目录,Linux更改Docker运行根目录的方法
  4. 用python的turtle画圆-PYTHON练习1-turtle画圆
  5. mysql 分表的3种方法
  6. ubuntu 配置dns访问外网
  7. linux7 开ftp,linux centos 7 开启 ftp
  8. SSM解决Mapper映射文件不发布
  9. Linux双网卡NAT共享上网
  10. Python3——多线程之threading模块
  11. 基于JAVA+SpringMVC+Mybatis+MYSQL的就业信息管理系统
  12. 内容管理系统(CMS)的设计和选型
  13. debian安装中文字体
  14. 启发式搜索 :A*算法详解
  15. SQL达梦数据库迁移
  16. 浙江大学计算机学院复试拟录取名单,浙江大学计算机学院2015年考研复试拟录名单...
  17. 开发也可以如此简单!华为云发布两款开发工具
  18. 等保测评2.0:MySQL身份鉴别(上)
  19. Augustus操作指南
  20. oracle添加序列

热门文章

  1. 湖南中烟计算机类考什么,2022湖南中烟专业知识模拟题:计算机类(八)
  2. SQL,从熟练到掌握
  3. 各种加速卡 异构计算
  4. k8s的namespace资源一直terminating问题解决
  5. Leetcode575:分糖果
  6. 推荐一款 GitHub 星标 11.5K 的神器,可将任何设备转换为电脑辅助屏幕
  7. agv系统介绍_AGV小车控制系统介绍
  8. html 抓取移动,网页采集提取数据教程,以自定义抓取方式为例 - 八爪鱼采集器...
  9. ON-LSTM:用有序神经元表达层次结构
  10. WH-1000XM3耳机怎么连接蓝牙