В этой статье блога мы рассмотрим различные методы решения проблемы поиска самой длинной допустимой подстроки в круглых скобках. Мы рассмотрим несколько подходов, включая динамическое программирование, стековые алгоритмы и регулярные выражения. Каждый метод будет сопровождаться примерами кода, иллюстрирующими его реализацию. Давайте погрузимся!
Метод 1: динамическое программирование
Динамическое программирование — мощный метод решения задач оптимизации. Мы также можем использовать его для поиска самой длинной допустимой подстроки в круглых скобках. Вот как это работает:
def longest_valid_parentheses_dp(s):
n = len(s)
dp = [0] * n
max_len = 0
for i in range(1, n):
if s[i] == ')':
if s[i - 1] == '(':
dp[i] = dp[i - 2] + 2 if i >= 2 else 2
elif i - dp[i - 1] > 0 and s[i - dp[i - 1] - 1] == '(':
dp[i] = dp[i - 1] + dp[i - dp[i - 1] - 2] + 2 if i - dp[i - 1] >= 2 else dp[i - 1] + 2
max_len = max(max_len, dp[i])
return max_len
Метод 2: подход на основе стека
Другой подход к решению проблемы с самыми длинными допустимыми круглыми скобками — использование стека. Вот как мы можем это реализовать:
def longest_valid_parentheses_stack(s):
stack = [-1]
max_len = 0
for i in range(len(s)):
if s[i] == '(':
stack.append(i)
else:
stack.pop()
if len(stack) == 0:
stack.append(i)
else:
max_len = max(max_len, i - stack[-1])
return max_len
Метод 3. Регулярные выражения
Регулярные выражения предоставляют краткий способ сопоставления шаблонов в строках. Мы можем использовать их для идентификации допустимых подстрок в круглых скобках. Вот пример реализации:
import re
def longest_valid_parentheses_regex(s):
pattern = r'\(\)'
max_len = 0
while re.search(pattern, s):
s = re.sub(pattern, '', s)
max_len = max(max_len, len(s))
return max_len
В этой статье мы рассмотрели три различных метода поиска самой длинной допустимой подстроки в круглых скобках. Мы обсудили динамическое программирование, стековые алгоритмы и регулярные выражения. Каждый метод имеет свои преимущества и может применяться исходя из конкретных требований задачи. Поняв эти методы и их реализацию в коде, вы теперь обладаете знаниями, позволяющими эффективно решать проблемы с самыми длинными допустимыми круглыми скобками.
Не забудьте выбрать наиболее подходящий метод в зависимости от размера входных данных и сложности проблемы. Приятного кодирования!