Sobes.tech
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'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 düzgün işləyir iç-içə və ardıcıl mötərizələr üçün, məsələn:

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