擅长:python、mysql、java
<p>有了counter变量,您就走上了正确的轨道,但是在没有看到整个代码的情况下,很难说到底出了什么问题。基本上,你要做的是:决定往哪个方向走,注意什么。将匹配的paren数初始化为1,然后遍历数组。如果您再次找到原始的parens,增加计数器,如果找到对应的,则减少计数器。如果计数器为零,则返回当前位置。在</p>
<p>你可以试试这样的方法:</p>
<pre><code>def match(array, pos):
try:
step = {"(": +1, ")": -1} [array[pos]] # go left or right?
other = {"(": ")", ")": "("}[array[pos]] # what to look for?
count = 1 # number of 'other' we have to find
cur = pos # current position
while True:
cur += step # go one step further
if array[cur] == array[pos]: # nested parens
count += 1
if array[cur] == other: # found match (but maybe for nested)
count -= 1
if count == 0: # found match for original parens
return cur
except KeyError:
# not a ( or ) or no match found
return None
array = ["(","foo",")","(","bar","(",")",")"]
print([match(array, i) for i, _ in enumerate(array)])
# [2, None, 0, 7, None, 6, 5, 3]
</code></pre>