From 3e16c3a1d047aca54d4d7134d5f5fb1cbd6acd69 Mon Sep 17 00:00:00 2001 From: Stoycho Kyosev Date: Wed, 20 Nov 2024 15:37:03 -0500 Subject: Add Seminar06 --- Seminar06/src/balanced-brackets.cpp | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Seminar06/src/balanced-brackets.cpp (limited to 'Seminar06/src/balanced-brackets.cpp') diff --git a/Seminar06/src/balanced-brackets.cpp b/Seminar06/src/balanced-brackets.cpp new file mode 100644 index 0000000..cce5d01 --- /dev/null +++ b/Seminar06/src/balanced-brackets.cpp @@ -0,0 +1,43 @@ +#include +#include + +bool is_opening_bracket(char ch) +{ + return ch == '(' || ch == '{' || ch == '['; +} + +bool is_closing_bracket(char ch) +{ + return ch == ')' || ch == ']' || ch == '}'; +} + +bool is_corresponding_brackets(char left, char right) +{ + return left == '(' && right == ')' || left == '{' && right == '}' || left == '[' && right == ']'; +} + +bool balanced_brackets(const std::string& str) +{ + std::stack s; + + for (char c : str) + { + if (is_opening_bracket(c)) + { + s.push(c); + } + else if (is_closing_bracket(c)) + { + if (s.empty()) + return false; + + char top = s.top(); + s.pop(); + + if (!is_corresponding_brackets(top, c)) + return false; + } + } + + return s.empty(); +} \ No newline at end of file -- cgit v1.3.1-23-gd82d