이러한 대괄호 '(', ')', '{', '}', '[' 및 ']'를 포함하는 문자열 str이 있다고 가정하고 대괄호가 균형을 이루는지 여부를 확인해야 합니다. 여는 대괄호 유형과 닫는 대괄호 유형이 같은 유형일 때 대괄호가 균형을 이룬다고 말할 수 있습니다. 대괄호는 올바른 순서로 닫힙니다.
따라서 입력이 {([])}와 같으면 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- cnt :=0
- i :=0
- j :=-1
- solve() 함수를 정의합니다. 시간이 걸립니다.
- cnt :=cnt - 1
- s :=s의 새 목록
- j> -1이고 s[j]가 temp와 같으면
- s[i] :='#'
- s[j] :='#'
- j>=0이고 s[j]가 '#'과 같을 때 do
- j :=j - 1
- 나는 :=나는 + 1>
- 1을 반환
- 그렇지 않으면
- 0을 반환
- 메인 방법에서 다음을 수행하십시오. -
- s의 크기가 0과 같으면
- 참 반환
- 그렇지 않으면
- ans :=거짓
- i
- s[i]가 '}'와 같으면
- ans :=해결(들, '{')
- as가 0과 같으면
- 거짓을 반환
- 그렇지 않으면 s[i]가 ')'와 같을 때
- ans :=해결(들, '(')
- as가 0과 같으면
- 거짓을 반환
- 그렇지 않으면 s[i]가 ']'와 같을 때
- ans :=해결(들, '[')
- as가 0과 같으면
- 거짓을 반환
- 그렇지 않으면
- j :=나
- 나는 :=나는 + 1
- cnt :=cnt + 1
- s[i]가 '}'와 같으면
- cnt가 0과 같지 않으면
- 거짓을 반환
- 참 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
cnt = 0 i = 0 j = -1 def solve(s, temp): global i, j, cnt cnt -= 1 s = list(s) if j > -1 and s[j] == temp: s[i] = '#' s[j] = '#' while j >= 0 and s[j] == '#': j -= 1 i += 1 return 1 else: return 0 def bracketOrderCheck(s): global i, j, cnt if len(s) == 0: return True else: ans = False while i < len(s): if s[i] == '}': ans = solve(s, '{') if ans == 0: return False elif s[i] == ')': ans = solve(s, '(') if ans == 0: return False elif s[i] == ']': ans = solve(s, '[') if ans == 0: return False else: j = i i += 1 cnt += 1 if cnt != 0: return False return True print(bracketOrderCheck("{([])}"))
입력
"{(()[])}"
출력
True