带索引和缩进的Python平衡括号错误
我最近接触了python,在编写解决方案以检查一系列括号是否平衡时遇到了这个问题。我检查了关于缩进的不同帖子,但这似乎没有帮助。它在elif行上给了我一个索引超出范围的错误,这是我在访问第一个和最后一个字符后没有得到的。任何帮助和反馈都将不胜感激带索引和缩进的Python平衡括号错误,python,recursion,indentation,Python,Recursion,Indentation,我最近接触了python,在编写解决方案以检查一系列括号是否平衡时遇到了这个问题。我检查了关于缩进的不同帖子,但这似乎没有帮助。它在elif行上给了我一个索引超出范围的错误,这是我在访问第一个和最后一个字符后没有得到的。任何帮助和反馈都将不胜感激 def nest_paren(s): if s == " ": return True elif len(s) % 2 == 1 or s[0] != '(' or s[-1] != ')': return
def nest_paren(s):
if s == " ":
return True
elif len(s) % 2 == 1 or s[0] != '(' or s[-1] != ')':
return False
return nest_paren(s[1:-1])
nest_paren(s="(())") # This should return True
nest_paren(s="((())") # This should return False
你的基本情况不正确。您需要处理空字符串,而不是带有空格的字符串 如果s==”:将
更改为如果s==”:
,它应该可以工作
我假设您只接受一组嵌套的括号,形式为(…(())…)
。如果您还需要识别存在多个相邻的非嵌套平衡圆括号集的位置(如(())()
),则需要更复杂的算法。这里有一种简单的方法,可以通过对字符串进行迭代而不是递归来实现:
def nest_paren(s):
open_count = 0
for c in s:
if c == '(':
open_count += 1
elif c == ')'
open_count -= 1
if open_count < 0:
return False
else: # non-parenthesis character, you could ignore these instead
return False
return open_count == 0
def嵌套参数:
打开计数=0
对于s中的c:
如果c=='(':
打开计数+=1
elif c==')'
打开\u计数-=1
如果打开\u计数<0:
返回错误
else:#非括号字符,您可以忽略这些字符
返回错误
返回打开的\u计数==0
您是否需要处理多组括号,如“()”
?是的,它工作正常,谢谢!!