43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
|
class Solution:
|
||
|
def isValid(self, s: str) -> bool:
|
||
|
def rcg_type(ch) -> int:
|
||
|
if ch[0] =='(':
|
||
|
return 1
|
||
|
if ch[0] ==')':
|
||
|
return 2
|
||
|
if ch[0] =='{':
|
||
|
return 3
|
||
|
if ch[0] =='}':
|
||
|
return 4
|
||
|
if ch[0] =='[':
|
||
|
return 5
|
||
|
if ch[0] ==']':
|
||
|
return 6
|
||
|
stack = []
|
||
|
top_idx = -1
|
||
|
def is_empty():
|
||
|
return top_idx == -1
|
||
|
def set_ele(stack: list, idx: int, ele: int):
|
||
|
if len(stack) <= idx:
|
||
|
stack.append(ele)
|
||
|
else:
|
||
|
stack[idx] = ele
|
||
|
for ch in s:
|
||
|
tp = rcg_type(ch)
|
||
|
if tp % 2 == 1:
|
||
|
top_idx += 1
|
||
|
set_ele(stack, top_idx, tp)
|
||
|
else:
|
||
|
if is_empty(): return False
|
||
|
top_ele = stack[top_idx]
|
||
|
if tp - top_ele != 1: return False
|
||
|
top_idx -= 1
|
||
|
if not is_empty(): return False
|
||
|
return True
|
||
|
|
||
|
sol = Solution()
|
||
|
print(sol.isValid("()"))
|
||
|
print(sol.isValid("(){}[]"))
|
||
|
print(sol.isValid("(]"))
|
||
|
print(sol.isValid("[(])"))
|