Leetcode高频100题刷题记录之——有效的括号

Leetcode高频100题刷题记录之——有效的括号

1 思路分析

这题比两数求和感觉更加简单(当然两数求和用哈希表的方法也很简单)。思路非常直观,用栈”先进后出“的思想可以非常容易地得到答案。

符号定义:“s”:题目中输入的字符串;“staging_list”:预先定义的一个空表,用来暂存数据

Step1:将字符串转化成ASCII码的形式,本题的六个字符串如下:

符号ASCII码符号ASCII码
(040)041
[091]093
{123}125

遍历s中的所有字符:

Step2:判断staging_list[-1]是否是空表,若是,转Step4

Step3:遍历s中的所有字符,判断表中最后一个字符staging_list[-1]与当前字符si之间的差值si-staging_list[-1]是否处于[1, 2]区间内,若是,转Step5,否则转Step4

Step4:将si插入staging_list的末尾(入栈);

Step5:将staging_list中最后一个字符删除(出栈);

Step6:判断staging_list是否是空表,若是,返回"True",否则返回"False"。

2 代码实现

附上python代码版本:

class Solution:
    def isValid(self, s: str) -> bool:
        '''
        ASCII码表:
        '(': 040;       ')': 041;
        '[': 091;       ']': 093;
        '{': 123;       '}': 125;
        '''
        s = [ord(si) for si in s]  # 将字符串转换为ASCII码
        staging_list = []  # 定义一个空表,用来暂存括号

        for si in s:

            if len(staging_list) == 0:  # 判断是否为空表,若是,将s中的当前值加入表中
                staging_list.append(si)
            
            elif (0 < (si - staging_list[-1]) < 3):  # 后一个括号与当前最后一个括号互相匹配
                staging_list.pop()  # 括号已匹配,删除
            else:
                staging_list.append(si)

        if len(staging_list) > 0:
            return False
        else:
            return True


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值