-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBracketMatcher.kt
41 lines (36 loc) · 1.16 KB
/
BracketMatcher.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
* Identity weather statement is fulfilling opening and closing brackets or not like when bracket is opening
* then it also has to close otherwise statement is false.
* */
fun main() {
println(bracketMatcher02("(coder)(byte)()"))
}
fun bracketMatcher(statement: String): Boolean {
var flag = true
var count = 0
statement.forEach {
if (it == '(') count++
else if (it == ')')
if (count > 0) count--
else {
flag = false
return@forEach
}
}
return flag
}
fun bracketMatcher02(statement: String): Boolean {
val stack = ArrayDeque<Char>()
val matchingBrackets = mapOf(')' to '(', '}' to '{', ']' to '[')
statement.forEach {
when {
it == '(' || it == '{' || it == '[' -> stack.addLast(it) // Push opening brackets
it == ')' || it == '}' || it == ']' -> {
if (stack.isEmpty() || stack.removeLast() != matchingBrackets[it]) {
return false // Unmatched closing bracket or stack underflow
}
}
}
}
return stack.isEmpty() // If stack is empty, brackets are balanced
}