题意:
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列。
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
方法:
栈
思路:模拟。
首先,初始化一个字符栈;
然后,遍历字符串;
如果是左括号,则入栈;如果是右括号,则判断:如果括号不匹配或者栈为空,则返回失败。最后如果栈还存在左括号,则返回失败。
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;
}
};
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号