Balanced Parentheses
Given a string of brackets ()[]{}, check whether they are balanced and correctly nested using a stack.
Sample input
{[()]}
Sample output
true
Solution
def is_balanced(s):
pairs = {')': '(', ']': '[', '}': '{'}
stack = []
for ch in s:
if ch in '([{':
stack.append(ch)
elif ch in ')]}':
if not stack or stack.pop() != pairs[ch]:
return False
return not stack
print(is_balanced("{[()]}"))
function isBalanced(s) {
const pairs = { ")": "(", "]": "[", "}": "{" };
const stack = [];
for (const ch of s) {
if ("([{".includes(ch)) stack.push(ch);
else if (")]}".includes(ch)) {
if (stack.pop() !== pairs[ch]) return false;
}
}
return stack.length === 0;
}
console.log(isBalanced("{[()]}"));
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
static boolean isBalanced(String s) {
Deque<Character> stack = new ArrayDeque<>();
for (char ch : s.toCharArray()) {
if (ch == '(' || ch == '[' || ch == '{') {
stack.push(ch);
} else if (ch == ')' || ch == ']' || ch == '}') {
if (stack.isEmpty()) return false;
char open = stack.pop();
if ((ch == ')' && open != '(') ||
(ch == ']' && open != '[') ||
(ch == '}' && open != '{')) return false;
}
}
return stack.isEmpty();
}
public static void main(String[] args) {
System.out.println(isBalanced("{[()]}"));
}
}
fun isBalanced(s: String): Boolean {
val pairs = mapOf(')' to '(', ']' to '[', '}' to '{')
val stack = ArrayDeque<Char>()
for (ch in s) {
if (ch in "([{") {
stack.addLast(ch)
} else if (ch in ")]}") {
if (stack.isEmpty() || stack.removeLast() != pairs[ch]) return false
}
}
return stack.isEmpty()
}
fun main() {
println(isBalanced("{[()]}"))
}
func isBalanced(_ s: String) -> Bool {
let pairs: [Character: Character] = [")": "(", "]": "[", "}": "{"]
var stack = [Character]()
for ch in s {
if ch == "(" || ch == "[" || ch == "{" {
stack.append(ch)
} else if let open = pairs[ch] {
if stack.isEmpty || stack.removeLast() != open {
return false
}
}
}
return stack.isEmpty
}
print(isBalanced("{[()]}"))
bool isBalanced(String s) {
final pairs = {')': '(', ']': '[', '}': '{'};
final stack = <String>[];
for (var ch in s.split('')) {
if ('([{'.contains(ch)) {
stack.add(ch);
} else if (')]}'.contains(ch)) {
if (stack.isEmpty || stack.removeLast() != pairs[ch]) return false;
}
}
return stack.isEmpty;
}
void main() {
print(isBalanced('{[()]}'));
}
#include <iostream>
#include <stack>
using namespace std;
bool isBalanced(string s) {
stack<char> st;
for (char ch : s) {
if (ch == '(' || ch == '[' || ch == '{') st.push(ch);
else if (ch == ')' || ch == ']' || ch == '}') {
if (st.empty()) return false;
char open = st.top();
st.pop();
if ((ch == ')' && open != '(') ||
(ch == ']' && open != '[') ||
(ch == '}' && open != '{')) return false;
}
}
return st.empty();
}
int main() {
cout << (isBalanced("{[()]}") ? "true" : "false") << endl;
return 0;
}
#include <stdio.h>
#include <string.h>
int isBalanced(const char *s) {
char stack[1000];
int top = -1;
for (int i = 0; s[i]; i++) {
char ch = s[i];
if (ch == '(' || ch == '[' || ch == '{') {
stack[++top] = ch;
} else if (ch == ')' || ch == ']' || ch == '}') {
if (top < 0) return 0;
char open = stack[top--];
if ((ch == ')' && open != '(') ||
(ch == ']' && open != '[') ||
(ch == '}' && open != '{')) return 0;
}
}
return top == -1;
}
int main() {
printf("%s\n", isBalanced("{[()]}") ? "true" : "false");
return 0;
}