leetcode 20 Valid Parentheses

本文介绍了一种使用Python实现的有效括号匹配算法。通过三种不同方法验证括号串是否正确闭合,包括利用栈结构逐个匹配、循环替换匹配对以及简化版的循环替换。这些方法不仅适用于圆括号,也适用于方括号和花括号。

 

20Valid Parentheses    33.90%检查正反括号是否配对完整
python中in的用法:for char in s
replace():str.replace(old, new[, max])

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Jan  8 21:03:48 2018

@author: vicky
"""

#先顺序找到左括号,在反序查找右括号

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        d={'(':')','{':'}','[':']'} #dict{keys:values}
        p=[] #[]为list,可以用pop;“”为string,不能用pop。所以p=[]
        #range(a,b,c),从a到b间隔为c,数组写法是array[a:b:c]
        for char in s:
        #字典的key:value提出方法:d.keys(),d.values()
            if char in d.keys(): #或者 char in '([{':
                p.append(char)
            else:
            #字典pop用法:dict.pop(key)删去一对key和value
            #list pop用法:
            #list.pop(obj=list[-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
            #p.pop()=p.pop(-1),移除列表中的最后一个元素,并且返回最后一个元素。运行后的p=原来的p删掉最后一个元素.   
                if p==[] or d[p.pop()]!=char: #判断的同时p的值已经删除了最后一个元素
                    return False
        return p==[]


s="([)]" #false
s="([])" #true
s="]"
Solution().isValid(s)


class Solution(object):
    def isValid(self, s):
        n = len(s)
        while(n != 0 and n%2 == 0): 
#            注意替换函数replace的运用:
#            str.replace(old, new[, max])
#                old -- 将被替换的子字符串。
#                new -- 新字符串,用于替换old子字符串。
#                max -- 可选字符串, 替换不超过 max 次
            s = s.replace("()", "")
            s = s.replace("[]", "")
            s = s.replace("{}", "")
            # breaks while loop if string was not altered during current pass
            if n>len(s):
                n=len(s) 
            else:
                n=0
        return len(s) == 0
    
    
#最简洁,但是运行速度慢
class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if len(s) == 0:
            return True
        if len(s)%2!= 0:
            return False
        while '()' in s or '{}' in s or '[]' in s:
            s = s.replace('{}','').replace('()','').replace('[]','')
        return len(s)==0

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值