算法面试题——给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效。

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 算法面试题——给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效。,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在这里插入图片描述


给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

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

示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses

思路:
遍历字符串
遇到左边括号,就入栈
遇到右边括号,就弹出栈顶
为空——》False
不为空——》弹出栈顶元素
栈顶元素和遇到的右边的括号匹配一下,看是否是相同类型
是不同类型就返回False
是相同类型就继续向下遍历
如果字符串全部匹配完了
栈为空 – True
占不为空 – False

创建栈

class Stack:
    def __init__(self):
        # 把列表的最后一个元素作为栈顶
        self.__data = []

    def push(self, item):
        # 添加一个元素到栈顶
        # append insert
        self.__data.append(item)

    def pop(self):
        # 要判断栈是否为空
        if self.is_empty():
            raise ValueError('栈为空')
        return self.__data.pop()

    def top(self):
        # 要判断栈是否为空
        if self.is_empty():
            raise ValueError('栈为空')
        return self.__data[-1]

    def is_empty(self):
        return self.__data == []

    def size(self):
        return len(self.__data)
from stack01 import Stack
def func(string):
    if len(string)%2:
        return False
    stack=Stack()
    dic={
        '(':')',
        '[':']',
        '{':'}'
    }
    for char in string:
        #todo 判断遇到的是左括号还是右括号
        if char in '([{':
            stack.push(dic[char])
        else:
            if stack.is_empty() or stack.pop()!=char:
                return False
    return stack.is_empty()

if __name__ == '__main__':
    print(func('{([])}'))

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123181.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!