Problems › TypeScript › patterns
Balanced delimiters
A config linter walks a snippet and rejects it if the brackets, braces and parentheses do not nest cleanly.
- Only the characters ( ) [ ] { } matter; everything else is ignored.
- Every opener must have a matching closer of the same kind, in the right order.
- An empty snippet — or one with no brackets at all — is fine.
balancedDelimiters(text: string) → bool
Where you start
function balancedDelimiters(text: string): boolean {
}
Worked examples
| Call | Result |
|---|---|
balancedDelimiters("()") | true |
balancedDelimiters("([])") | true |
balancedDelimiters("(]") | false |
balancedDelimiters("[(])") | false |
Hint
Push each opener, and when a closer arrives the top of the stack must be its matching opener.
Reference solution in TypeScript
function balancedDelimiters(text: string): boolean {
const expect: string[] = [];
for (const ch of text) {
if (ch === '(') expect.push(')');
else if (ch === '[') expect.push(']');
else if (ch === '{') expect.push('}');
else if (ch === ')' || ch === ']' || ch === '}') {
if (expect.pop() !== ch) return false;
}
}
return expect.length === 0;
}