Sobes.tech
Senior

/*Gegeven een string, moet een functie worden geïmplementeerd om de correctheid van de haakjesaanduiding te controleren. Elk open haakje moet overeenkomen met een bijbehorend sluitend haakje. Open en sluit haakjes moeten in de juiste volgorde staan. Types haakjes: "{", "}", "(", ")", "[", "]". Invoer: "([]){}[(()())()]" Resultaat: true Invoer: "[(])" Resultaat: false Omdat de haakjes 2 en 3 verkeerd zijn aangegeven, verschijnt de sluitende ']' eerder dan de sluitende '(' */ 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

Antwoord van 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