解法:
看到這些判斷左右對稱的題,首先想到的就是用棧。
首先指定括號間的配對關係,例如 “()”,“[ ]”,“{ }”。用一個變量map_dict裝着,讓程序知道“)”和“(”,“]”和“[”是配對的。
然後把不在map_dict的key中的字符放如棧stack中,等待匹配。
若遍歷到map_dict的key中的字符(右括號),則把棧頂字符出棧,判斷出棧的這個字符是否是遍歷到的右括號所對應的左括號。
是則繼續循環,不是則直接返回False。
最後,要是有效的括號字符,棧最後一定爲空,因爲有多少個左括號,就有多少個右括號匹配。若非空,則返回False
class Solution(object):
def isValid(self, s):
stack = []
map_dict = {')':'(',']':'[','}':'{'}
for char in s:
if char in map_dict:
top_char = stack.pop()
if top_char != map_dict[char]:
return False
else:
stack.append(char)
return not stack
s = '(([]))'
ss = Solution()
print(ss.isValid(s)) #True