Допустимые скобки

#20.Действительные скобки

Постановка проблемы

Дана строка s, содержащая только символы '(', ')', '{', '}'. , '[' и ']', определяют, является ли входная строка действительной.

Входная строка является допустимой, если:

  1. Открытые скобки должны быть закрыты скобками того же типа.
  2. Открытые скобки должны быть закрыты в правильном порядке.

Пример 1

Input: s = "()"
Output: true
Войдите в полноэкранный режим Выход из полноэкранного режима

Пример 2

Input: s = "()[]{}"
Output: true
Войдите в полноэкранный режим Выход из полноэкранного режима

Пример 3

Input: s = "(]"
Output: false
Войдите в полноэкранный режим Выход из полноэкранного режима

Пояснение

Если дана строка, содержимое которой состоит только из (, ), [, ], {, }, то скобки используются таким же образом и по тем же правилам, что и в математике. Правила такие же, как и для математических операций, например, ( может быть закрыт только ), пожалуйста, проверьте, действительна ли строка

Решение

Изначально исключить строки нечетной длины, так как скобки находятся в группах по две, а одиночной скобки не существует.

Если текущий символ является правой скобкой, вытолкните верхний элемент стека и сравните их, чтобы увидеть, одинаковы ли они, если да, то продолжайте следующий цикл, иначе верните <# code>false

В последнем else if, в дополнение к вышеприведенному суждению, если цикл еще не завершился, но в стеке больше нет элементов, это означает, что больше нет соответствующих скобок и возвращает false<##code

Если после завершения цикла в стеке все еще есть элементы, то соответствующие скобки отсутствуют, поэтому окончательный результат - равно ли количество элементов в стеке нулю

public bool IsValid(string s)
{
    if (s.Length % 2 != 0) return false;

    Stack<char> stack = new Stack<char>();

    for (int i = 0; i < s.Length; i++)
    {
        if (s[i] == '(')
            stack.Push(')');
        else if (s[i] == '[')
            stack.Push(']');
        else if (s[i] == '{')
            stack.Push('}');
        else if (stack.Count == 0 || s[i] != stack.Pop())
            return false;
    }

    return stack.Count == 0;
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Ссылка

LeetCode Solution

Репозиторий GitHub


Спасибо, что прочитали статью 🌷 🌻 🌼

Если вам понравилось, пожалуйста, не стесняйтесь нажать на кнопку сердечка ❤️
или нажмите кнопку "Нравится" на моем решении Leetcode
или следите за моим GitHub ⭐.
или купите мне кофе ⬇️ Я буду благодарен.


Оцените статью
devanswers.ru
Добавить комментарий