擅长:python、mysql、java
<p>我建议在开头添加行<code>print(stack)</code>或<code>for</code>循环。然后在几个示例输入上执行算法。你可能会注意到一些奇怪的事情</p>
<p>请花一点时间去做,试着找出它有什么奇怪之处。这将为您提供如何改进算法的灵感</p>
<p></p>
<p>是你干的吗?在完成之前,请不要再读下去</p>
<p>这个答案的其余部分假设您已经在for循环的开头添加了<code>print(stack)</code>,并且您已经在几个输入示例中查看了输出,并且您已经尝试注意到关于输出的一些令人惊讶的事情。请在阅读此答案的其余部分之前完成此操作</p>
<p>您的算法维护一个<strong>堆栈</strong>,但是如果您在每次迭代时输出堆栈,您会注意到:堆栈只包含字符<code>(</code>的副本。没有别的了。这是因为<code>stack.append(char)</code>的唯一出现处就在<code>if char in ['(']:</code>的正下方,因此您只会添加<code>(</code></p>
<p>所以实际上,这个堆栈中包含的唯一信息是它包含了多少<code>(</code>。不需要实际维护堆栈,只需维护一个计数器,<em>即</em>,一个整数,告诉您如果有堆栈,堆栈上将有多少<code>(</code></p>
<p>用<code>depth = 0</code>替换<code>stack = []</code>,然后用<code>depth += 1</code>替换<code>stack.append(char)</code>,用<code>depth -= 1</code>替换<code>stack.pop()</code></p>
<p>您的检查<code>if current_char == '(':</code>一点用处都没有,因为堆栈上的字符都是<code>(</code>,所以检查总是正确的,因此是多余的</p>
<p>我将让您计算出计数器的哪些值应该返回true,哪些值应该返回false。祝你好运</p>