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.
思路
使用栈,见到左括号入栈,右括号出栈。栈空了之后第一次入栈的注意看是不是左括号,出栈的时候注意看是不是匹配,最后遍历完毕的时候注意看栈里面是不是还有没有匹配完的字符。
class Solution {
public:
bool isValid(string s) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if(s.length() == 0) return true;
if(s.length() % 2 == 1) return false;
stack<char> st;
for(int i = 0; i < s.length(); i++)
{
if(st.empty())
{
if(s[i] == ']' || s[i] == ')' || s[i] == '}') return false;
else if(s[i] == '[') st.push(']');
else if(s[i] == '(') st.push(')');
else if(s[i] == '{') st.push('}');
}
else
{
char tmp=st.top();
if(tmp == '[' || tmp == '(' || tmp == '{') return false;
if(s[i] == '[')
{
st.push(']');
continue;
}
else if(s[i] == '(')
{
st.push(')');
continue;
}
else if(s[i] == '{')
{
st.push('}');
continue;
}
if(tmp == s[i]) st.pop();
else return false;
}
}
if(st.empty()) return true;
else return false;
}
};