给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。
这个题目蛮有意思的,在做这个题目之前对stack(栈)的使用很少,具有先入后出的特性,如果配对是正确的,每一个右括号都要有一个左括号和它对应,左括号应该存在栈顶,使用了一个unordered_map来存储括号的配对,key是右括号,值是对应类型的左括号,遇到左括号就放在栈里,如果是右括号就应该在map中,栈为空或者栈的top不是右括号对应的左括号配对就是错误的,返回false,最终如果栈空了就反回true,具体代码如下
class Solution { public: bool isValid(string s) { if (s.empty()) { return true; } unordered_map<char, char> pairs = {{')', '('}, {']', '['}, {'}', '{'}}; if (s.size() % 2 != 0) { return false; } stack<char> stk; for (auto c : s) { if (pairs.count(c) == 1) { if (stk.empty() || stk.top() != pairs[c]) { return false; } stk.pop(); } else { stk.push(c); } } return stk.empty(); } };