Sobes.tech
Senior

/*Verilmiş bir sətir üçün, möhkəm parantez göstəricisinin düzgünlüyünü yoxlamaq üçün funksiya həyata keçirilməlidir. Hər açılan möhkəm parantez müvafiq bağlanan parantezə uyğun olmalıdır. Açılan və bağlanan parantezlər düzgün ardıcıllıqla olmalıdır. Parantez növləri: "{", "}", "(", ")", "[", "]". Daxil edilən: "([]){}[(()())()]" Nəticə: true Daxil edilən: "[(])" Nəticə: false Çünki 2 və 3-cü parantezlər yanlış göstərilib, bağlanan ']' əvvəlcə bağlanan '(' ilə qarşılaşır. */ 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 Süni İntellekt

AI-dan cavab

Java'da təklif olunan funksiya yığın və bağlayan mötərizələri uyğun açanlarla xəritələşdirməklə mötərizələrin düzgün yerləşməsini düzgün yoxlayır.

Əsas fikir:

  • Açılan mötərizə ilə rastlaşanda, onu yığına əlavə et.
  • Bağlanan mötərizə ilə rastlaşanda, yığının ən üst elementinin onunla uyğun olub-olmadığını yoxla.
  • Uyğunsuzluq və ya yığın boşdursa, false qaytar.
  • Sonda, yığının boş olub-olmadığını yoxla (bütün mötərizələr bağlanıb).

Kotlin-də nümunə tətbiq:

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()
}

Bu kod iç-içə və ardıcıl mötərizələri düzgün idarə edir, məsələn:

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