7 методов декодирования строки в Python: руководство LeetCode

В этой статье блога мы рассмотрим несколько методов декодирования строки в Python, сосредоточив внимание на решении проблем LeetCode, связанных с декодированием строк. Декодирование строк — распространенная проблема на собеседованиях по программированию и соревнованиях по алгоритмам, и хорошее понимание различных подходов может значительно улучшить ваши навыки решения проблем. Итак, давайте углубимся и рассмотрим семь различных методов с примерами кода для декодирования строк.

Метод 1: использование рекурсии

def decodeString(s):
    stack = []
    for char in s:
        if char != ']':
            stack.append(char)
        else:
            decoded_string = ''
            while stack and stack[-1] != '[':
                decoded_string = stack.pop() + decoded_string
            stack.pop()  # Pop the '['
            num = ''
            while stack and stack[-1].isdigit():
                num = stack.pop() + num
            stack.append(int(num) * decoded_string)
    return ''.join(stack)

Метод 2: использование стека

def decodeString(s):
    stack = []
    for char in s:
        if char != ']':
            stack.append(char)
        else:
            decoded_string = ''
            while stack[-1] != '[':
                decoded_string = stack.pop() + decoded_string
            stack.pop()  # Pop the '['
            num = ''
            while stack and stack[-1].isdigit():
                num = stack.pop() + num
            stack.append(int(num) * decoded_string)
    return ''.join(stack)

Метод 3. Использование регулярных выражений

import re
def decodeString(s):
    pattern = r'(\d+)\[([a-zA-Z]+)\]'
    while re.search(pattern, s):
        s = re.sub(pattern, lambda m: int(m.group(1)) * m.group(2), s)
    return s

Метод 4. Использование рекурсивного подхода (альтернативный вариант)

def decodeString(s):
    def helper(s, i):
        decoded_string = ''
        num = ''
        while i < len(s):
            if s[i].isdigit():
                num += s[i]
            elif s[i] == '[':
                inner_decoded_string, i = helper(s, i + 1)
                decoded_string += int(num) * inner_decoded_string
                num = ''
            elif s[i] == ']':
                return decoded_string, i
            else:
                decoded_string += s[i]
            i += 1
        return decoded_string
    return helper(s, 0)

Метод 5: использование стека и итеративного подхода

def decodeString(s):
    stack = []
    current_num = 0
    current_string = ''
    for char in s:
        if char.isdigit():
            current_num = current_num * 10 + int(char)
        elif char == '[':
            stack.append((current_string, current_num))
            current_string = ''
            current_num = 0
        elif char == ']':
            prev_string, num = stack.pop()
            current_string = prev_string + num * current_string
        else:
            current_string += char
    return current_string

Метод 6: использование рекурсивного подхода с указателем

def decodeString(s):
    def helper(s, pointer):
        decoded_string = ''
        num = ''
        while pointer < len(s):
            if s[pointer].isdigit():
                num += s[pointer]
            elif s[pointer] == '[':
                inner_decoded_string, pointer = helper(s, pointer + 1)
                decoded_string += int(num) * inner_decoded_string
                num = ''
            elif s[pointer] == ']':
                return decoded_string, pointer
            else:
                decoded_string += s[pointer]
            pointer += 1
        return decoded_string, pointer
    return helper(s, 0)[0]

Метод 7. Повышение эффективности использования стека

def decodeString(s):
    stack = []
    decoded_string = ''
    num = 0
    for char in s:
        if char.isdigit():
            num = num * 10 + int(char)
        elif char == '[':
            stack.append((decoded_string, num))
            decoded_string = ''
            num = 0
        elif char == ']':
            prev_string, prev_num = stack.pop()
            decoded_string = prev_string + prev_num * decoded_string
        else:
            decoded_string += char
    return decoded_string

В этой статье мы рассмотрели семь различных методов декодирования строки в Python, уделив особое внимание решению проблем LeetCode. Мы рассмотрели различные методы, включая рекурсию, подходы на основе стека, регулярные выражения и алгоритмы на основе указателей. Каждый метод обеспечивает уникальный взгляд на решение проблем декодирования строк. Поняв и применив эти методы, вы сможете улучшить свои навыки решения проблем и более эффективно решать аналогичные задачи.

Помните, что практика имеет решающее значение в освоении алгоритмов и структур данных. Попробуйте применить эти методы в своих проектах и ​​изучите другие задачи LeetCode, чтобы еще больше укрепить свои навыки программирования.

Удачного программирования!