利用栈来实现,若为左括号,将字符入栈,若为右括号,栈顶是否为其对应左括号,若对应,栈顶元素出栈。循环结束,若栈为空,则字符串括号匹配正确,否则,匹配错误。
#include <iostream>
#include <stack>
using namespace std;
bool isValid(string s) {
string left="({[";
string right=")}]";
string total=right+left;
stack<char> stk;
for(auto item : s)
{
if(total.find(item) != string::npos)
{
if(left.find(item) != string::npos)
{
stk.push(item);
}
else
{
if (!stk.empty() && stk.top() ==left.at(right.find(item)))
stk.pop();
else
return false;
}
}
}
return stk.empty();
}
int main()
{
string s="{{{([(asdf)rgfr]ttt)!!!}}}",s2="{{{)))}}}";
cout<<isValid(s)<<endl<<isValid(s2)<<endl;
return 0;
}