Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 O(1) space O(N^2) 시간 복잡도 표현식에서 균형 잡힌 괄호 확인

<시간/>

이러한 대괄호 '(', ')', '{', '}', '[' 및 ']'를 포함하는 문자열 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
  • 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