forked from adnanaziz/EPIJudge
-
Notifications
You must be signed in to change notification settings - Fork 0
/
is_valid_parenthesization.cc
36 lines (32 loc) · 1006 Bytes
/
is_valid_parenthesization.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iterator>
#include <stack>
#include <string>
#include <unordered_map>
#include "test_framework/generic_test.h"
using std::stack;
using std::string;
using std::unordered_map;
bool IsWellFormed(const string& s) {
stack<char> left_chars;
const unordered_map<char, char> kLookup = {
{'(', ')'}, {'{', '}'}, {'[', ']'}};
for (int i = 0; i < size(s); ++i) {
if (kLookup.count(s[i])) {
left_chars.emplace(s[i]);
} else {
if (empty(left_chars) || kLookup.at(left_chars.top()) != s[i]) {
// Unmatched right char or mismatched chars.
return false;
}
left_chars.pop();
}
}
return empty(left_chars);
}
int main(int argc, char* argv[]) {
std::vector<std::string> args{argv + 1, argv + argc};
std::vector<std::string> param_names{"s"};
return GenericTestMain(args, "is_valid_parenthesization.cc",
"is_valid_parenthesization.tsv", &IsWellFormed,
DefaultComparator{}, param_names);
}