Python 编译器和解析器,codechef上的答案错误

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

你可以在下面的链接上找到这个问题 我只想用堆栈结构来解决这个问题,而不是用任何其他简单的方法。 我已经检查了所有可能的6个字符长度输入的输出,但没有找到任何错误答案(我比较了正确解决方案的输出) 请找出algo将给出错误答案的任何组合

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兆字节的堆栈才能推送所有这些字符