leetcode - 20. 有效的括号
题目大意
括号匹配问题。
解题思路
遇到左括号就进栈push,遇到右括号并且栈顶为与之对应的左括号,就把栈顶元素出栈。最后看栈里面还有没有其他元素,如果为空,即匹配。
需要注意,空字符串是满足括号匹配的,即输出 true。
#include <iostream>
#include <string>
#include <stack>
using namespace std;
bool isValid(string s)
{
stack<char> st;
for(auto ch : s)
{
if(ch == '{' || ch == '[' || ch =='(')
{
st.push(ch);
}
else if(ch=='}' || ch == ']' || ch == ')')
{
if(st.empty()) return false;
char sch = st.top();
if((sch=='{' && ch == '}') || (sch == '[' && ch == ']') || (sch == '('))
{
st.pop();
}
else
{
return false;
}
}
else
{
return false;
}
}
return st.empty();
}
int main(int argc,char **argv)
{
string s = "{{}{[]()}}";
if(argc > 1)
{
s = argv[1];
}
cout<<"str = \""<<(s)<<"\""<<endl;
cout<<isValid(s)<<endl;
}