LeetCode解题(第20题)

LeetCode解题(第20题)


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

有效字符串需满足:

1.左括号必须用相同类型的右括号闭合

2.左括号必须以正确的顺序闭合。

示例1:

输入:"()"

输出:true

示例2:

输入:"()[]{}"

输出:true

示例3:

输入:"(]"

输出:false

示例4:

输入:"([)]"

输出:false

示例5:

输入:"{[]}"

输出:“true”


解析:

这道题一开始的想法就是使用栈进行匹配,在Python中可以使用列表进行类似于栈的功能,但是也可以定义一个Stack类,在Python中实现栈的功能,所以这道题中我先定义Stack类,然后进行栈的匹配。在这道题中有几种特殊情况:1.空字符串:" " 2.没有左括号:")}]" 3.缺一部分括号:"{]}"(可能写的比较繁琐)


代码(Python3版本)

首先定义Stack类,实现栈的pop,push,peek等相关功能

class Stack: 
    def __init__(self): 
        self.items = [] 

    def isEmpty(self): 
        return len(self.items)==0  

    def push(self, item): 
        self.items.append(item) 

    def pop(self): 
        return self.items.pop()  

    def peek(self): 
        if not self.isEmpty(): 
            return self.items[len(self.items)-1] 

    def size(self): 
        return len(self.items) 

之后使用栈,进行括号的匹配

S = Stack()
c=0
d=0
f=0
number = len(s)
if number>0:
	for i in range(0,number):
        if s[i] == "(" or s[i]=="{" or s[i] =="[":
            x=s[i]
            S.push(x)
            c=c+1
            f=f+1
        if s[i] == ")" or s[i]=="}" or s[i] =="]":
            d=d+1
            if s[i] == ")" and S.peek()=="(":
                c = c-1
                S.pop()
                d=d-1
            if s[i] == "}" and S.peek()=="{":
                c= c-1
                S.pop()
                d=d-1
            if s[i] == "]" and S.peek()=="[":
                c = c-1
                S.pop()
                d=d-1

    if c ==0 and d==0 and f >0:
        return True
    else:
        return False
else:
    return True

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值