diff --git a/adaptors_task/student/src/impl.cpp b/adaptors_task/student/src/impl.cpp index 170c42fd..63b8dbb7 100644 --- a/adaptors_task/student/src/impl.cpp +++ b/adaptors_task/student/src/impl.cpp @@ -1,8 +1,37 @@ #include "impl.h" #include +#include const std::vector> brackets { {'(', ')'}, {'[', ']'}, {'{', '}'} }; + +bool isValid(const std::string& source) { + std::stack pairedBrackets; + + for (auto const& c : source) { + for (auto const& bracket : brackets) { + if ( c == bracket.first) { + pairedBrackets.push(c); + break; + } + else if ( c == bracket.second) { + if (pairedBrackets.empty()) { + return false; + } + char lastBracket = pairedBrackets.top(); + pairedBrackets.pop(); + + for (auto const& bracket_ : brackets) { + if (lastBracket == bracket_.first && c != bracket_.second) { + return false; + } + } + break; + } + } + } + return pairedBrackets.empty(); +} \ No newline at end of file