Sobes.tech
Senior

/*Dat fiind un șir, este necesar să implementați o funcție pentru a verifica corectitudinea indicării parantezelor. Fiecare paranteză deschisă trebuie să aibă o paranteză închisă corespunzătoare. Parantezele deschise și cele închise trebuie să fie în ordinea corectă. Tipuri de paranteze: "{", "}", "(", ")", "[", "]". Intrare: "([]){}[(()())()]" Rezultat: true Intrare: "[(])" Rezultat: false Pentru că parantezele 2 și 3 sunt indicate incorect, închizătoarea ']' apare înaintea închizătoarei '(' */ 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

Răspuns de la AI

Funcția propusă în Java verifică corect plasarea corectă a parantezelor folosind o stivă și maparea parantezelor de închidere la cele de deschidere corespunzătoare.

Ideea principală:

  • Când întâlnești o paranteză de deschidere, o pui pe stivă.
  • Când întâlnești o paranteză de închidere, verifici dacă elementul de deasupra stivei corespunde cu ea.
  • Dacă nu există corespondență sau stiva este goală, returnează false.
  • La final, verifici dacă stiva este goală (toate parantezele sunt închise).

Exemplu de implementare în 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()
}

Acest cod gestionează corect parantezele încorporate și secvențiale, de exemplu:

println(check("([]){}[(()())()]") ) // true
println(check("[(])")) // false