https://coderun.yandex.ru/problem/correct-bracket-sequence/description | Легкая |
---|
Рассмотрим последовательность, состоящую из круглых, квадратных и фигурных скобок. Программа дожна определить, является ли данная скобочная последовательность правильной.
• Пустая последовательность явлется правильной.
• Если A
— правильная последовательность, то последовательности (A)
, [A]
, {A}
— правильные.
• Если A
и B
— правильные последовательности, то последовательность AB
— правильная.
Ввод:
()[]Вывод:
yes
Ввод:
([)]Вывод:
no
Ввод:
(Вывод:
no
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.Stack
// Функция проверки соответствия открывающей и закрывающей скобок
fun matches(open: Char, close: Char): Boolean =
open == '(' && close == ')' ||
open == '[' && close == ']' ||
open == '{' && close == '}'
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
val s = reader.readLine()
val stack = Stack<Char>()
// Проходим по каждому символу в строке
for (c in s) {
when (c) {
// Если скобка открывающая, добавляем её в стек
'(', '[', '{' -> stack.push(c)
// Если скобка закрывающая, проверяем соответствие
')', ']', '}' -> {
if (stack.isEmpty() || !matches(stack.pop(), c)) {
writer.write("no")
writer.flush()
return
}
}
}
}
// Проверяем, пуст ли стек (все скобки корректно закрыты)
if (stack.isEmpty()) writer.write("yes")
else writer.write("no")
writer.flush()
}