首页 > 其他分享 >3170. 删除星号以后字典序最小的字符串

3170. 删除星号以后字典序最小的字符串

时间:2024-09-24 14:50:42浏览次数:1  
标签:运算 ch vert 星号 str 3170 Sigma stack 字典

题目链接 3170. 删除星号以后字典序最小的字符串
思路 堆栈 & 位运算
题解链接 三种写法:26 个栈+位运算优化(Python/Java/C++/Go)
关键点 1. 用堆栈跟踪各个字母出现的位置 2. 用位运算跟踪当前最小字母(lowbit技巧
时间复杂度 朴素做法:\(O(n\vert\Sigma\vert)\) 位运算优化:\(O(n+\vert\Sigma\vert)\)
空间复杂度 朴素做法:\(O(n+\vert\Sigma\vert)\) 位运算优化:\(O(n+\vert\Sigma\vert)\)

代码实现(朴素做法):

class Solution:
    def clearStars(self, s: str) -> str:
        s = list(s)
        stack = [[] for _ in range(26)]
        for i, ch in enumerate(s):
            if ch != '*':
                stack[ord(ch) - ord('a')].append(i)
                continue
            for positions in stack:
                if positions:
                    s[positions.pop()] = '*'
                    break
        return "".join(ch for ch in s if ch != "*")

代码实现(位运算优化):

class Solution:
    def clearStars(self, s: str) -> str:
        s = list(s)
        stack = [[] for _ in range(26)]
        mask = 0
        for i, ch in enumerate(s):
            if ch != '*':
                ch = ord(ch) - ord('a')
                stack[ch].append(i)
                mask |= 1 << ch
            else:
                lowbit = mask & -mask
                position = stack[lowbit.bit_length() - 1]
                s[position.pop()] = '*'
                if not position:
                    mask ^= lowbit
        return "".join(ch for ch in s if ch != '*')

标签:运算,ch,vert,星号,str,3170,Sigma,stack,字典
From: https://www.cnblogs.com/WrRan/p/18429137

相关文章

  • Python字典进阶:setdefault技巧让你的代码更优雅,用setdefault优化你的Python数据处理流
    推荐阅读:数据科学的秘密武器:defaultdict——Python字典的自动化填充神器,让数据结构更灵活一、什么是setdefaultPython中的setdefault方法是字典(dict)类型的一个非常实用的方法,它允许开发者在尝试访问字典中不存在的键时,自动为该键设置一个默认值,并返回这个默认值。 二、s......
  • python 字典的解包、合并
    python字典的解包、合并内容在Python中,可以使用以下方式解包和打包字典:解包字典使用**运算符可以解包字典,将字典中的键值对作为关键字参数传递给函数或构造器。例如:deffunc(a,b,c):print(a,b,c)params={'a':1,'b':2,'c':3}func(**params)#输出:......
  • 【py】计算字母出现次数 字典储存
     代码 用于计算用户输入字符串中每个字母字符的出现频率:fromcollectionsimportCounterdefcalculate_character_frequency():  #获取用户输入的字符串  user_input=input("请输入一个字符串:")     #将字符串转换为小写,并过滤掉非字母字符 ......
  • 字典Trie树
    题目描述维护一个字符串集合,支持两种操作:I x 向集合中插入一个字符串 x;Q x 询问一个字符串在集合中出现了多少次。共有 N (1≤N≤2×10^4) 个操作,输入的字符串总长度不超过 10^5,字符串仅包含小写英文字母。输入格式第一行包含整数 N,表示操作数。接下来 N 行,......
  • python字典
    字典dict字典的字符类型<class'dict'>字典表达符:{}1、字典(dict)是一种可变容器模型,且可存储任意类型对象2、字典的每个键,值key,value键值对形式3、键值用:分割,每个键值对之间用逗号分隔4、整个字典用{}包含5、字典键唯一,值不是唯一的d={'name':'hz','age':18}print(ty......
  • 【Python系列】字典判断空
    ......
  • Redis 字典的哈希函数和 rehash 操作详解
    Redis字典的哈希函数和rehash操作详解在Redis中,字典(HashTable)是一种重要的数据结构,用于存储键值对。下面解释Redis字典的哈希函数和rehash操作。一、哈希函数作用Redis的字典使用哈希函数将键转换为一个整数索引,这个索引用于确定键值对在哈希表中的存储位......
  • Python字典:解锁数据处理的新维度
    引言在日常的软件开发过程中,我们常常遇到需要快速查找、更新或删除大量数据的需求。传统数组虽然使用广泛,但在某些场景下效率较低。此时,字典就展现了它无可比拟的优势——O(1)的时间复杂度让数据访问变得极为高效。更重要的是,通过灵活运用字典的高级特性,如嵌套字典、字典推导式等,......
  • day06 数据类型:指针、切片、字典
    day06数据类型Go语言中常见的数据类型有很多,例如:整型,用于表示整数。浮点型,用于表示小数。布尔型,用于表示真/假。字符串,用于表示文本信息。数组,用于表示多个数据(数据集合)指针,用于表示内存地址的类型。切片,用于表示多个数据(数据集合)字典,用于表示键值对结合。结构体,用于......
  • 【Python学习笔记】 第8章 列表与字典
    列表Python的列表是:任意对象的有序集合通过偏移访问可变长度、异构以及任意嵌套属于“可变序列”的分类对象引用数组下表是常见/具有代表性的列表对象操作:操作解释L=[]一个空的列表L=[123,'abc',1.23,{}]有四个项的列表,索引从0到3L=......