diff options
Add Seminar06
1 files changed, 43 insertions, 0 deletions
| -rw-r--r-- | Seminar06/src/balanced-brackets.cpp | 43 |
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 <stack> +#include <string> + +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<char> 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 |
