20. 有效的括号 力扣(简单) 栈,害怕括号
20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
代码:
class Solution { public: bool isValid(string s) { stack<char> Q; bool flag=1; for(auto i:s) { if(i=='(' || i=='[' || i=='{') Q.push(i); else { if(i==')') { if(Q.empty() || Q.top()!='(') {flag=0; break;} else Q.pop(); } if(i==']') { if(Q.empty() || Q.top()!='[') {flag=0; break;} else Q.pop(); } if(i=='}') { if(Q.empty() || Q.top()!='{') {flag=0; break;} else Q.pop(); } } } if(Q.size()>0) flag=0; return flag; } };
优秀写法:慢一点
class Solution { public: bool isValid(string s) { stack<char> Q; unordered_map<char,char> mp={ {')','('}, {']','['}, {'}','{'}}; bool flag=1; for(auto i:s) { if(i=='(' || i=='[' || i=='{') Q.push(i); if(i==')' || i==']' || i=='}') { if(Q.empty() || Q.top()!=mp[i]) {flag=0; break;} else Q.pop(); } } if(Q.size()>0) flag=0; return flag; } };