Senior
/*Берилген жол бар, жакшылардын туура көрсөтүлүшүн текшерүү үчүн функцияны ишке ашыруу керек. Ар бир ачылуучу жакшыл жабылуучу жакшылга туура келиши керек. Ачылуучу жана жабылуучу жакшылдар туура тартипте болушу керек. Жакшылардын түрлөрү: "{", "}", "(", ")", "[", "]". Киргизүү: "([]){}[(()())()]" Жыйынтык: чын Киргизүү: "[(])" Жыйынтык: жалган Эмне үчүн 2 жана 3-жакшылдар туура көрсөтүлбөгөн, жабылуучу ']' мурда пайда болот, жабылуучу '(' алдында. */ public boolean check(String s){ Deque<Character> stack = new ArrayDeque<>(); Map<Character, Character> map = Map.of( ')', '(', ']', '[', '}', '{' ); // ((( for( char c : s.toCharArray()){ if(map.containsValue(c)){ stack.push(c); } else if(map.containsKey(c)){ if( stack.isEmpty() || stack.pop() != map.get(c)){ return false; } } } return stack.isEmpty(); }
sobes.tech AI
AIден жооп
Предложенная функция на Java корректно проверяет правильность расстановки скобок с помощью стека и отображения закрывающих скобок на соответствующие открывающие.
Основная идея:
- При встрече открывающей скобки кладём её в стек.
- При встрече закрывающей — проверяем, что верхний элемент стека соответствует ей.
- Если нет соответствия или стек пуст, возвращаем false.
- В конце проверяем, что стек пуст (все скобки закрыты).
Пример реализации на Kotlin:
fun check(s: String): Boolean {
val stack = ArrayDeque<Char>()
val map = mapOf(')' to '(', ']' to '[', '}' to '{')
for (c in s) {
if (c in map.values) {
stack.push(c)
} else if (c in map.keys) {
if (stack.isEmpty() || stack.pop() != map[c]) {
return false
}
}
}
return stack.isEmpty()
}
Этот код корректно обрабатывает вложенные и последовательные скобки, например:
println(check("([]){}[(()())()]") ) // true
println(check("[(])")) // false