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。继续努力吧!

浙公网安备 33010602011771号