首页 > 其他分享 >day11- 20.有效括号|1047.删除字符串中所有相邻重复项

day11- 20.有效括号|1047.删除字符串中所有相邻重复项

时间:2023-02-11 23:44:53浏览次数:57  
标签:1047 删除 item 匹配 括号 day11 字符串 20 stack

20. 有效括号

leetcode题目链接:https://leetcode.cn/problems/valid-parentheses/

题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例:
示例1:

输入:s = "()"
输出:true

示例2:

输入:s = "()[]{}"
输出:true

示例3:

输入:s = "(]"
输出:false

题目解读&思考过程:
本题是栈的经典应用,下面是我的思考过程:
首先字符串有效的条件中1、3要求左右括号能够正常匹配,不能有多余的;重点在第二个条件:左括号必须以正确的顺序闭合,这是什么意思呢?可以举一个例子来看看匹配过程;
例如:字符串 s = "{()[()]}",这就是一个满足条件的字符串,匹配过程如下:

  1. 遇到左括号不进行匹配,把左括号保存起来;--> 左括号按序用一个数据类型进保存
  2. 遇到右括号时,对最后保存的一个左括号进行类型匹配;--> 遇到右括号时,匹配最后一个左括号
  3. 匹配成功后删除对应的左括号 --> 匹配成功后从数据结构中移除对应左括号

整个匹配过程是非常满足栈先进先出的特性的;

Python代码:

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []  # 定义栈,用于保存左括号对应的右括号
        for item in s:
            if item == '{':  # 匹配左括号-> 入栈 -> 且是对应的右括号
                stack.append('}')
            elif item == '[':
                stack.append(']')
            elif item == '(':
                stack.append(')')
            elif not stack or stack[-1] != item:  # 匹配右括号,先判断栈是否非空,再比较值
                return False
            else:  # 匹配成功->最后一个元素->出栈
                stack.pop()

        return True if not stack else False


1047. 删除字符串中所有相邻重复项

leetcode题目:https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/

题目描述:
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:
输入:"abbaca"
输出:"ca"
解释: 例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。

题目解读&思考过程:
本题也是经典的栈应用,和20. 有效括号一样都是匹配问题,匹配到后再做消除操作;

Python代码:

class Solution:
    def removeDuplicates(self, s: str) -> str:
        stack = []
        for item in s:
            if not stack or item != stack[-1]:
                stack.append(item)
            else:
                stack.pop()
        return "".join(stack)

1047. 删除字符串中所有相邻重复项

leetcode题目:https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/

题目描述:
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:
输入:"abbaca"
输出:"ca"
解释: 例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。

题目解读&思考过程:
本题也是经典的栈应用,和20. 有效括号一样都是匹配问题,匹配到后再做消除操作;

Python代码:

class Solution:
    def removeDuplicates(self, s: str) -> str:
        stack = []
        for item in s:
            if not stack or item != stack[-1]:
                stack.append(item)
            else:
                stack.pop()
        return "".join(stack)

标签:1047,删除,item,匹配,括号,day11,字符串,20,stack
From: https://www.cnblogs.com/zzggtt/p/17113078.html

相关文章

  • #yyds干货盘点#【愚公系列】2023年02月 微信小程序-电商项目-添加收货地址功能实现
    前言在电商系统中,收货地址是必不可少的功能,没有收货地址用户在下单就没法收到货,而且一个用户会有多个收货地址,比如寄给自己,或者寄给别人。一搬在收货地址选择中会有个默认......
  • 2023/2/11
    今天终于把驾照拿到手了,很兴奋,也是第一天开始实现按昨日计划行动的一天,但是第一天就碰到了意外情况,对象昨晚开始就胃不舒服,今早发现是胃溃疡的症状所以带去看了医生,不过好......
  • 2019-2020 ICPC, Asia Jakarta L - Road Construction 网络流
    直接用城市建点的话不好表达连边的关系考虑把每条边看作左部点右部点的话朴素想法是工人,但是也不好表达工人和材料的关系发现工人的信息可以整合成一共有多少种材料,每种......
  • [HAOI2018]染色
    \(\text{Solution}\)第二道二项式反演题挺套路的设\(g(i)\)为恰好出现\(S\)次的颜色至少有\(i\)种那么\[g(i)=\binom{m}{i}\binom{n}{is}\frac{(is)!}{(s!)^i}(......
  • Tomcat任意文件写入(CVE-2017-12615)漏洞复现
    一、漏洞原理Tomcat设置了写权限(readonly=false)我们可以向服务器写入文件<servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina......
  • 【蓝桥杯基础题】2021年省赛填空题—卡片
    一、题目背景本题为2021年省赛填空题C/C++B组第2题JavaB组第2题JavaB组第3题二、题目描述小蓝有很多数字卡片,每张卡片上都是数字0到9。小蓝准备用这些卡片来......
  • GitLab CICD Day 20 - 部署 Image 到服务器上
    ​​1. 服务部署到目标服务器上​​(多次部署同一个服务时,会失败,因为会端口冲突)variables:user:ericpwd:Admin@1234harbor:http://172.16.128.215:8080image_he......
  • 2023最新Python阅读书籍推荐
    abyteofpython(中文:简明Python教程)入门的书很多,但能让新手轻松看懂的就少了,作者写的思路非常清晰,对每一个知识点讲解的很到位,不多不少,对初学者来说,力道刚刚好。这本书是......
  • Word List 2023
    WordList2023记录2023年阅读论文时遇到的单词wildcard通配符wildcardpredicate通配符谓词maturation成年过程;长大成人ever-increasing不断增加的stochastic......
  • 第 20 章 XML Web 服务
    20.1XML-RPC简介......................................34420.2使用XML-RPC进行通信.....................34520.2.1发送请求........................................