#20.Действительные скобки
Постановка проблемы
Дана строка s
, содержащая только символы '('
, ')'
, '{'
, '}'
. , '['
и ']'
, определяют, является ли входная строка действительной.
Входная строка является допустимой, если:
- Открытые скобки должны быть закрыты скобками того же типа.
- Открытые скобки должны быть закрыты в правильном порядке.
Пример 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 ⭐.
или купите мне кофе ⬇️ Я буду благодарен.