algos_and_structures/leetcode/stacks/0020_valid_parentheses.py

58 lines
1.4 KiB
Python

# Link: https://leetcode.com/problems/valid-parentheses/description/
class Solution:
def isValid(self, s: str) -> bool:
c = [] # Checker stack
m = {
")": "(",
"}": "{",
"]": "[",
}
cb = m.keys()
op = m.values()
for char in s:
if len(c) == 0:
c.append(char)
continue
if char in op:
c.append(char)
continue
if char in cb:
if len(c) > 0 and c[-1] == m[char]:
c.pop()
continue
if len(c) > 0 and c[-1] != m[char]:
return False
if len(c) == 0:
return False
print(f"c = {c} (len={len(c)})")
return False if len(c) > 0 else True
if __name__ == "__main__":
tt = "()[]{}"
sol = Solution
print(f"Initial: {tt}")
print(sol().isValid(tt))
print("-" * 60)
tt = "()"
print(f"Initial: {tt}")
print(sol().isValid(tt))
print("-" * 60)
tt = "())"
print(f"Initial: {tt}")
print(sol().isValid(tt))
print("-" * 60)
tt = "([])"
print(f"Initial: {tt}")
print(sol().isValid(tt))
print("-" * 60)
tt = "("
print(f"Initial: {tt}")
print(sol().isValid(tt))
print("-" * 60)
tt = "(])"
print(f"Initial: {tt}")
print(sol().isValid(tt))
print("-" * 60)