Skip to content

Instantly share code, notes, and snippets.

@khawajafarooq
Created July 29, 2018 20:27
Show Gist options
  • Save khawajafarooq/efafd1e9bb9dace7860ba7b08f857634 to your computer and use it in GitHub Desktop.
Save khawajafarooq/efafd1e9bb9dace7860ba7b08f857634 to your computer and use it in GitHub Desktop.
swift bracket balancing
import Foundation
let openBrackets: [Character] = ["(", "{", "["]
let closedBrackets: [Character] = [")", "}", "]"]
// overloading ~= empowers your pattern mathing in switch
func ~=<T: Equatable>(pattern: [T], value: T) -> Bool {
return pattern.contains(value)
}
func isExpressionBalanced(_ expression: String) -> Bool {
guard !expression.isEmpty else { return false }
var stack = [Character]()
for char in expression {
switch char {
case openBrackets: stack.append(char)
case closedBrackets:
guard !stack.isEmpty else { return false }
if (stack.last! == "(" && char == ")") ||
(stack.last! == "{" && char == "}") ||
(stack.last! == "[" && char == "]") {
stack.removeLast()
}
default: break
}
}
return stack.isEmpty
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment