Advertisement
MaximTakkaTo

Untitled

Dec 23rd, 2020
597
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.12 KB | None | 0 0
  1. '''
  2.    Проверка скобочной последовательно на правильность
  3.    Возвращает true, если последовательность правильная
  4.    sequence - строка - скобочная последовательность
  5.    i, j - границы проверки строки
  6. '''
  7. def isValidSequence(sequence:str, i:int, j:int):
  8.     flag = 0                        # Реверсивный счетчик
  9.     for k in range(i, j + 1):       # Проходим по строке от i до j включительно
  10.         if (sequence[k] == '('):    # Если встречаем откр. скобку, увеличиваем счетчик
  11.             flag += 1
  12.         else:                       # Если встречаем закр. скобку, уменьшаем счетчик  
  13.             flag -= 1              
  14.         if flag < 0:                # Если счетчик < 0, дальнейшую проверку продолжать не имеет смысла - послед. неправильная
  15.             return False
  16.     return flag == 0
  17.  
  18.  
  19. '''
  20.    Восставновление скобочной последовательности с помощью проверок подстрок
  21.    Возвращает входную скобочную последовательность
  22.    sequence - входная строка - ПРАВИЛЬНАЯ скобочная последовательность
  23. '''
  24. def getSequence(sequence:str):
  25.     output = [''] * len(sequence)   # Объявляем строку для восстановления проверки
  26.     i = 0
  27.     while i < len(sequence):    # Проходим по индексам исходной строки
  28.         j = i + 1               # Начинаем проверку подстрок внутри входной строки с i и i+1
  29.         while not isValidSequence(sequence, i, j) and j < len(sequence) and output[i] == '': # Выполняем проверку подстрок с увеличением j на 1 до тех пор,
  30.             j += 1                                                                           # пока не найдем правильную последовательность (в границах i, j)
  31.                                                                                              # или j < длины исходной строки
  32.         if j < len(sequence) and output[i] == '':                                            # j выходит за границы в том случае, когда sequence[i] = ')'
  33.             output[i] = '('                                              # В противном случае добавляем в строку внешние скоби по индексам i;j,
  34.             output[j] = ')'                                              # образующих правильную последовательность
  35.         i += 1
  36.     output = ''.join(output)   # Преобразование массива символов в строку
  37.    
  38.     return output
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement