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.
解题思路:先建立一个栈,从左到右遍历每个字符,如果遇到'(','{','['则压入栈内,如果遇到右符号')','}',']'则要与栈顶元素配对,如果匹配则弹出栈顶元素,如果不匹配,则返回错误;如果遇到右符号时栈为空,返回false;遍历结束,如果栈为空,则说明所有符号已经匹配完毕,返回true,否则返回false.(P.S.返回sta.empty()即可)。
class Solution {
public:
bool isValid(string s) {
stack<char> st;
char c;
int i;
for(i=0;i<s.size();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();/*取出栈顶元素*/
st.pop();/*出栈*/
if((s[i]==')'&&c!='(')||(s[i]==']'&&c!='[')||(s[i]=='}'&&c!='{'))
return false;/*失配返回false*/
}
}
}
return st.empty();/*判断是否全部弹出*/
}
};