在觀看了關于括號驗證演算法的 youtube 教程后,我理解了除了這行代碼之外的所有內容。
stack[-1] == closeToOpen[c]:
遍歷回圈直到我碰到一個右括號 c 變成“)”
所以我猜代碼會靜態地
Stack[-1] #"(" == closeToOpen[")"]:
這是我感到困惑的地方,因為我不明白為什么 stack[-1] 是 "(" 等于 closeToOpen[")"].
是不是因為 closeToOpen[")"]回傳“)”的值是“(”?
def bracketCheck(s):
stack = [] # Open up empty stack DS
closeToOpen = { # Create dictionary to map closing brackets to opening brackets
"}": "{",
")": "(",
"]": "["
}
for c in s: # Go through each character in string
if c in closeToOpen: # If the character is a closing bracket in our dictionary
# If stack is not empty and the last character in the stack is equal to the character in the closing dictionary
if stack and stack[-1] == closeToOpen[c]:
stack.pop() # Delete the last character in the stack
else:
return False
else:
stack.append(c) # Add character to the stack
return True if not stack else False
print(bracketCheck("[()]"))
uj5u.com熱心網友回復:
正如您在以下代碼段中看到的:
closeToOpen = { # Create dictionary to map closing brackets to opening brackets
"}": "{",
")": "(",
"]": "["
}
closeToOpen 是一個字典,將右括號映射到相應的左括號。
這實際上意味著,closeToOpen[")"] == "("當您在堆疊末尾有一個“(”并看到一個右括號時,您檢查是否"(" == closeToOpen[")"]。如果為真,則從堆疊中彈出一個元素,因為您知道它們匹配。如果它們不匹配’ t 匹配,這意味著括號無效,因此您回傳 False。
如果到達回圈末尾而未回傳 False,則檢查堆疊是否為空,如果為空則回傳 True。否則,您將回傳 False,因為如果堆疊中還剩下任何左括號,則意味著它們缺少關閉的計數器部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/387604.html
