本文共 1857 字,大约阅读时间需要 6 分钟。
题目描述:
这道题是常见的不同括号之间的匹配问题。给定一个括号序列,给出他是否匹配的结果,匹配则返回True
,否则返回False
。 例如: "(){}[]" => True"([{}])" => True"(}" => False"[(])" => False"[({})](]" => False
代码如下:
def validBraces(string): result = [] for i in string: if i in "({[": result.append(i) elif len(result) != 0: if (i == ')') & (result[-1] == '('): result.pop() elif (i == '}') & (result[-1] == '{'): result.pop() elif result[-1] == '[': result.pop() if len(result) == 0: return True else: return False
有一个非常简单的做法如下,不需要额外的栈来存储:
def validBraces(s): while '{}' in s or '()' in s or '[]' in s: s=s.replace('{}','') s=s.replace('[]','') s=s.replace('()','') return s==''
但是这个代码如果只有右括号)
,就会出现错误的判断,在codewar里面没有这样的实例,所以忽略了这一点。
def validBraces(string): result = [] for i in string: if i in "({[": result.append(i) elif len(result) != 0: if (i == ')') & (result[-1] == '('): result.pop() elif (i == '}') & (result[-1] == '{'): result.pop() elif result[-1] == '[': result.pop() else: return False if len(result) == 0: return True else: return Falseprint(validBraces("))"))
这里也没有考虑有字母的情况,如果加上了字母,例如test()
。则该代码会出错。继续修改为:
def validBraces(string): result = [] for i in string: if i in "({[": result.append(i) elif len(result) != 0: if (i == ')') & (result[-1] == '('): result.pop() elif (i == '}') & (result[-1] == '{'): result.pop() elif result[-1] == '[': result.pop() elif i not in "(){}[]": continue else: return False if len(result) == 0: return True else: return Falseprint(validBraces("ttt(test()"))
转载地址:http://kqmws.baihongyu.com/