Senior
/*Տրված է տող, անհրաժեշտ է իրականացնել ֆունկցիա փակագծերի նշման ճիշտությունը ստուգելու համար: Յուրաքանչյուր բացվող փակագիծ պետք է համապատասխան լինի փակվող փակագծին: Բացվող և փակվող փակագծերը պետք է լինեն ճիշտ հերթականությամբ: Փակագծերի տեսակները: "{", "}", "(", ")", "[", "]". Ներմուծում: "([]){}[(()())()]" Արդյունք: true Ներմուծում: "[(])" Արդյունք: false Քանի որ 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- ում առաջարկվող ֆունկցիան ճիշտ ստուգում է փակագծերի տեղադրումը Stack և փակագծերի համապատասխանության քարտեզի միջոցով:
Հիմնական գաղափարը՝
- Երբ հանդիպում ենք բացվող փակագծին, այն ավելացնում ենք Stack-ին:
- Երբ հանդիպում ենք փակվող փակագծին, ստուգում ենք, արդյոք Stack-ի վերևի տարրն այն է:
- Եթե ոչ, կամ Stack-ը դատարկ է, վերադարձնում ենք false:
- Վերջում ստուգում ենք, արդյոք Stack-ը դատարկ է՝
Օրինակ 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