대괄호 문자열(둥근, 둥근 모양, 정사각형)이 있다고 가정하고 대괄호가 균형을 이루는지(정형화된) 여부를 확인해야 합니다.
따라서 입력이 s ="([()()]{[]})()"와 같으면 출력은 True
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 스택 :=새 목록
- d :=키-값 쌍이 있는 해시 맵('}', '{'),(')','('), (']', '[')
- s의 각 문자 c에 대해 다음을 수행합니다.
- c가 '}])' 중 하나이면
- 스택이 비어 있거나 스택의 맨 위가 d[c]와 같지 않으면
- 거짓을 반환
- 스택에서 팝
- 스택이 비어 있거나 스택의 맨 위가 d[c]와 같지 않으면
- 그렇지 않으면
- c를 스택에 푸시
- c가 '}])' 중 하나이면
- 스택이 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution:
def solve(self, s):
stack = []
d = {'}': '{',')': '(',']': '['}
for c in s:
if c in '}])':
if not stack or stack[-1] != d[c]:
return False
stack.pop()
else:
stack.append(c)
return not stack
ob = Solution()
print(ob.solve("([()()]{[]})()")) 입력
"([()()]{[]})()" 출력
True