题意:
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列。
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
方法:
栈
思路:模拟。
首先,初始化一个字符栈;
然后,遍历字符串;
如果是左括号,则入栈;如果是右括号,则判断:如果括号不匹配或者栈为空,则返回失败。最后如果栈还存在左括号,则返回失败。
class Solution { public: bool isValid(string s) { stack<char> st;//栈 int len=s.size(); for(int i=0;i<len;i++){//遍历字符串 if(s[i]=='('||s[i]=='['||s[i]=='{'){//左括号入栈 st.push(s[i]); }else if(s[i]==')'){//分别判断右括号 if(!st.empty()&&st.top()=='('){//如果括号不匹配或者栈为空,则返回失败 st.pop(); }else{ return false; } }else if(s[i]==']'){ if(!st.empty()&&st.top()=='['){ st.pop(); }else{ return false; } }else if(!st.empty()&&s[i]=='}'){ if(st.top()=='{'){ st.pop(); }else{ return false; } } } if(st.size()!=0)//最后如果栈还存在左括号,则返回失败 return false; return true; } };
时间复杂度:空间复杂度: