我编写了一个python脚本来检查大括号的有效性。我实现了堆栈,对于每个'{'我做堆栈推送操作,对于每个'}'我都堆栈弹出并查看它是否为空。但我无法想象我的代码有什么问题。
class Stack(object) :
def __init__(self) :
self.items = []
def push(self, item) :
self.items.append(item)
def pop(self) :
return self.items.pop()
def isEmpty(self) :
return (self.items == [])
def getStack(self) :
return self.items
def check_braces(file_data):
stack = Stack()
for char in file_data:
if char == '{':
stack.push('{')
#print stack.getStack()
if char == '}':
stack.pop()
#print stack.getStack()
if stack.isEmpty():
#print stack.isEmpty()
return 'braces are valid'
return 'braces are invalid'
myData = ['{', 'a:', '"1",', 'b:', '{', 'a:', '"2",', 'b:', '{', 'a:', '"7",', 'b:', '{', 'a:', '"14"', '}', '}', '},', 'b:', '{', 'a:', '"3",', 'b:', '{', 'a:', '"8"', '},', 'b:', '{', 'a:', '"9"', '}', '},', 'b:', '{', 'a:', '"4",', 'b:', '{', 'a:', '"10"', '},', 'b:', '{', 'a:', '"11",', 'b:', '{', 'a:', '"15"', '}', '}', '},', 'b:', '{', 'a:', '"5"', '},', 'b:', '{', 'a:', '"6",', 'b:', '{', 'a:', '"12"', '},', 'b:', '{', 'a:', '"13",', 'b:', '{', 'a:', '16', '},', 'b:', '{', 'a:', '17', '},', 'b:', '{', 'a:', '18', '}', '}', '}', '}']
print check_braces(myData)
答案 0 :(得分:1)
正如我在评论中所说,你必须检查两个案例:
class Stack (list):
def push (self, x):
return self.append (x)
def check_braces (data):
stack = Stack ()
for c in data:
if c == '{':
stack.push (c)
if c == '}':
if not stack: return False #First case: too many closing
stack.pop ()
return not stack #Second case too many opening
print (check_braces ('{}}') )
print (check_braces ('{{}') )
print (check_braces ('{}{') )
print (check_braces ('}{}') )
print (check_braces ('{}{}{{}}') )
但是关于堆栈唯一重要的是它的深度,你可以简单地使用:
def check_braces (data):
depth = 0
for c in data:
if c == '{':
depth += 1
if c == '}':
if not depth: return False
depth -= 1
return depth == 0
答案 1 :(得分:0)
您的代码非常好,但您的输入(myData
)有问题。
请改用以下内容 -
myData = ['{', 'a:', '"1",', 'b:', '{', 'a:', '"2",', 'b:', '{', 'a:', '"7",', 'b:', '{', 'a:', '"14"', '}', '}', '}', 'b:', '{', 'a:', '"3",', 'b:', '{', 'a:', '"8"', '}', 'b:', '{', 'a:', '"9"', '}', '}', 'b:', '{', 'a:', '"4",', 'b:', '{', 'a:', '"10"', '}', 'b:', '{', 'a:', '"11",', 'b:', '{', 'a:', '"15"', '}', '}', '}', 'b:', '{', 'a:', '"5"', '}', 'b:', '{', 'a:', '"6",', 'b:', '{', 'a:', '"12"', '}', 'b:', '{', 'a:', '"13",', 'b:', '{', 'a:', '16', '}', 'b:', '{', 'a:', '17', '}', 'b:', '{', 'a:', '18', '}', '}', '}', '}']
输入中的'},'
个条目很少'}'