去除重复字母Python解法
给你一个字符串 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解法相关推荐
- 力扣- -去除重复字母
力扣- -去除重复字母 文章目录 力扣- -去除重复字母 一.题目描述 二.分析 三.代码 四.问题描述 五.代码 一.题目描述 二.分析 题目的要求总结出来有三点: 要求一.要去重. 要求二.去重字 ...
- 20200213:去除重复字母(leetcode316)
去除重复字母 题目 思路与算法 代码实现 题目 思路与算法 首先对字符串进行遍历,将当前字符串依次入栈, 注意入栈的条件: 新入栈的元素在栈内没有出现过,必须是未出现过的元素 新入栈的元素如果比栈顶元 ...
- 316. 去除重复字母
链接:316. 去除重复字母 题解:https://leetcode-cn.com/problems/remove-duplicate-letters/solution/qu-chu-zhong-fu ...
- LeetCode 练习——316. 去除重复字母
文章目录 1.题目描述 2.思路 2.1 代码 2.2 测试结果 3.总结 1.题目描述 去除重复字母 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典 ...
- 316 Remove Duplicate Letters 去除重复字母
给定一个仅包含小写字母的字符串,去除重复的字母使得所有字母出现且仅出现一次.你必须保证返回结果是所有可能结果中的以字典排序的最短结果. 例如: 给定 "bcabc" 返回 &quo ...
- leetcode 316. Remove Duplicate Letters | 316. 去除重复字母(单调栈解法)
题目 https://leetcode.com/problems/remove-duplicate-letters 题解 关于什么是"字典序" 字典序,换成数字更好理解一点 a:1 ...
- 316. Remove Duplicate Letters 去除重复字母
给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置). 注意:该题与 1081 https://leetcode-c ...
- leetcode 316. 去除重复字母(单调栈)
给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置). 注意:该题与 1081 https://leetcode-c ...
- LeetCode 316. 去除重复字母 / 1081. 不同字符的最小子序列(单调栈)
文章目录 1. 题目 2. 解题 1. 题目 LC 316: 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置). ...
最新文章
- leetcode-142 环形链表II
- 如何用xmanager远程连接centos6.0的桌面
- linux docker运行目录,Linux更改Docker运行根目录的方法
- 用python的turtle画圆-PYTHON练习1-turtle画圆
- mysql 分表的3种方法
- ubuntu 配置dns访问外网
- linux7 开ftp,linux centos 7 开启 ftp
- SSM解决Mapper映射文件不发布
- Linux双网卡NAT共享上网
- Python3——多线程之threading模块
- 基于JAVA+SpringMVC+Mybatis+MYSQL的就业信息管理系统
- 内容管理系统(CMS)的设计和选型
- debian安装中文字体
- 启发式搜索 :A*算法详解
- SQL达梦数据库迁移
- 浙江大学计算机学院复试拟录取名单,浙江大学计算机学院2015年考研复试拟录名单...
- 开发也可以如此简单!华为云发布两款开发工具
- 等保测评2.0:MySQL身份鉴别(上)
- Augustus操作指南
- oracle添加序列