LeetCode第五天

20. Valid Parentheses 这道题主要是给一串字符串,都有'('')''{''}''[' 和 ']'主要是判断这一串字符串是否符合符号匹配规则,思想类似于堆栈,但是python没有堆栈这种数据结构,所以我采用一个List来模拟堆栈,在添加第一个字符遇到了问题,就是如果字符是'{','[','('中的一个,如果不判断List是否为空的话,可能就返回Ture了。所以我采用第一个字符直接加入堆栈,然后再对后面的进行匹配,最后看List的长度是否为0,如果为0,证明没啥问题。

class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        stack = []
        for char in s:
            length = len(stack) 
            if length == 0:  # 看stack是否为空,为空直接加入第一个字符
                stack.append(char)
            else:
                if char == ')':  # 接下来进行匹配即可
                    if stack[length-1] != '(':
                        return False
                    else:
                        del stack[length-1]
                elif char == '}':
                    if stack[length-1] != '{':
                        return False
                    else:
                        del stack[length-1]
                elif char == ']':
                    if stack[length-1] != '[':
                        return False
                    else:
                        del stack[length-1]
                else:
                    stack.append(char)  # 如果匹配不成功,把这个字符加入到堆栈中
        return len(stack) == 0  # 最后看这个堆栈长度是否为0

 

不过看别人代码,用到了一个字符串替换的replace方法,感觉挺好的,贴出来。

def isValid(self, s):
    delta = len(s)
    while(delta != 0 and delta%2 == 0):  # 其实如果delta的值是奇数,肯定有落单的
        s = s.replace("()", "")  # 如果字符串中存在()就换成空字符串,很秀,下同
        s = s.replace("[]", "")
        s = s.replace("{}", "")
        # breaks while loop if string was not altered during current pass
        delta = len(s) if delta > len(s) else 0  # 当delta>len(s)时,delta=len(s),反之delta=0,ps:当有上面的执行时,delta会比len(s)大,需要更新一下delta;反之,当上面三句话都没有执行时,证明没有符合条件的符号组,则delta=0,跳出循环,最后会返回False
    return len(s) == 0

 

我发现我写的代码总比别人多很多,不会用简单的方式书写,哎,不够elegant。继续努力吧!

 

 

 
posted @ 2018-03-03 23:15  Vancuicide  阅读(119)  评论(0)    收藏  举报