思路:
经典的括号匹配问题, 先把匹配关系存于一个哈希表中, 再用一个stack即可解决.
bool isValid(string s) {
// 储存匹配关系
unordered_map<char, char> hash;
hash[')'] = '(';
hash[']'] = '[';
hash['}'] = '{';
list<char> parens;
for (int i = 0; i < s.length(); i++) {
// 如果为左括号直接push进栈
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
parens.push_back(s[i]);
// 否则要保证栈不空并且栈顶和当前右括号是匹配的
else {
if (! parens.empty()
&& hash[s[i]] == parens.back())
parens.pop_back();
else return false;
}
}
// 如果右括号用完了, 还剩左括号, 那么就是错的
if (! parens.empty()) return false;
return true;
}