题目链接
题目描述(Description)
Valid Parentheses
Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[‘ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
有效的括号
给一个字符串只包含'(', ')', '{', '}', '[' ']'
,判断这个字符串时候合法。
括号必须按照规律匹配,如"()" "()[]{}"
都是合法的,但是"(]" 和 "([)]"
不合法.
分析(Analysis)
用一个栈模拟,遇到左括号则压入栈,遇到右括号则与栈顶进行匹配,如果失配则返回false
,如果匹配就弹出。如果没有右括号,返回false
。最后,如果栈不为空,则说明还有左括号没有匹配,返回false
,如果栈不为空,则说明所有括号都已经匹配返回true
,最终返回st.empty()
即可。
代码(Code)
class Solution {
public:
bool isValid(string s) {
stack<char> st;
char c;
for(int i=0;i<s.length();i++){
if(s[i]=='('||s[i]=='{'||s[i]=='[')
st.push(s[i]);
if(s[i]==')'||s[i]=='}'||s[i]==']')
{
if(st.empty())
return false;
else
{
c=st.top();
if((s[i]==')'&&c!='(')||(s[i]=='}'&&c!='{')||(s[i]==']'&&c!='['))
return false;
else
st.pop();
}
}
}
return st.empty();
}
};