Python 编译器和解析器,codechef上的答案错误
你可以在下面的链接上找到这个问题 我只想用堆栈结构来解决这个问题,而不是用任何其他简单的方法。 我已经检查了所有可能的6个字符长度输入的输出,但没有找到任何错误答案(我比较了正确解决方案的输出) 请找出algo将给出错误答案的任何组合Python 编译器和解析器,codechef上的答案错误,python,python-3.x,stack,Python,Python 3.x,Stack,你可以在下面的链接上找到这个问题 我只想用堆栈结构来解决这个问题,而不是用任何其他简单的方法。 我已经检查了所有可能的6个字符长度输入的输出,但没有找到任何错误答案(我比较了正确解决方案的输出) 请找出algo将给出错误答案的任何组合 class Stack: def __init__(self): self.items=[] def isempty(self): return self.items==[] def push(self,it
class Stack:
def __init__(self):
self.items=[]
def isempty(self):
return self.items==[]
def push(self,item):
self.items.append(item)
def pop(self):
self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
for j in range(int(input())):
arr=[x for x in input()]
s=Stack()
balanced=True
answer=0
fanswer=0
for h in range(len(arr)):
if arr[h]=="<":
s.push("<")
else:
if s.isempty():
break
else:
s.pop()
if not s.isempty():
balanced=False
answer=answer+1
else:
balanced=True
fanswer=fanswer+1
if h==(len(arr)-1) and s.isempty()!=True:
answer=0
if balanced==False: answer=0
print((answer+fanswer)*2)
类堆栈:
定义初始化(自):
self.items=[]
定义为空(self):
返回self.items==[]
def推送(自身,项目):
self.items.append(项目)
def pop(自我):
self.items.pop()
def peek(自):
返回自项目[len(self.items)-1]
def大小(自身):
返回len(自我项目)
对于范围内的j(int(input()):
arr=[x代表输入()中的x]
s=堆栈()
平衡=正确
答案=0
fanswer=0
对于范围内的h(len(arr)):
如果arr[h]==“考虑表达式
字符,answer
等于1,fanswer
等于1。表达式平衡到第4个字符
当您到达最后一个
时,您会增加答案
,但随后您会遇到以下情况:
if h==(len(arr)-1) and s.isempty()!=True:
answer=0
因此,您将answer
设置为0,因为您位于字符串的末尾,堆栈不是空的。因此,结果是(answer+fanswer)*2
返回2,这是不正确的。正确的答案是4
只需跟踪表达式平衡的最后一个索引,就可以大大简化代码。总体思路如下。请注意,这并不完全是Python代码,但您应该能够轻松地进行转换
balancePos = -1
for n in range(arr)
if (arr[n] == "<")
stack.push("<")
else
if (stack.isEmpty())
break;
stack.pop()
if (stack.isEmpty())
balancePos = n
print(balancePos+1)
balancePos=-1
适用于范围内的n(arr)
如果(arr[n]==“请查找任意组合”这不是一个问题,而且肯定是离题的。您的堆栈
的功能仅限于正常的列表
。列表中支持所有操作,仅支持其他名称。有些操作甚至更简单。您将遇到的一个问题是堆栈溢出。表达式的长度最多可达10^6个字符。如果其中一个表达式具有是的,499999“”个字符,您将耗尽堆栈空间,因为至少需要1兆字节的堆栈才能推送所有这些字符