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.
题目解析:
1、利用堆栈存放左边的符号。然后如果来的是右边符号就与左边符号进行匹配。匹配成功就出栈,不匹配就返回为false。
2、最后如果栈不为空,则返回false。
3、如果匹配的过程中,栈为空返回false。
#include <iostream>
#include <stack>
using namespace std;
bool isValid(string s) {
stack<char> sc;
string::size_type len = s.size();
if (len == 0)
{
return true;
}
for(string::size_type i = 0;i<len;i++)
{
if(s[i] == '(' || s[i] == '{' || s[i] == '[')
sc.push(s[i]);
else{
if (sc.empty())
{
return false;
}
if (s[i] == ')' && sc.top()=='(')
{
sc.pop();
}else if (s[i] == '}' && sc.top()=='{')
{
sc.pop();
}else if (s[i] == ']' && sc.top()=='[')
{
sc.pop();
}else{
return false;
}
}
}
if(sc.empty())
return true;
else
return false;
}
int main(void)
{
string s("[");
cout << isValid(s) << endl;
system("pause");
return 0;
}