这里的算法与此前所学习的算法训练营课程中的括号匹配问题,相类似,不过由于这里调用的是STL中的stack标准库文件所以,有基础略作改动。
class Solution {
public:
bool parent(const char exp[], int lo, int hi)
{
//表达式括号匹配检查,可兼顾三种括号
stack<char>S;//使用栈记录已发现但现尚未匹配的左括号
//cout << S.empty() << endl;
for (int i = lo; i <= hi; i++)
{
//逐一检查当前字符
switch (exp[i])
{
//左括号直接进栈;右括号若与栈顶失配,则表达式必不匹配
case '(':
case '[':
case '{':
{
S.push(exp[i]);
break;
}
case ')':
{
if ((S.empty()) || '(' != S.top())
{
return false;
}
else
{
S.pop();
}
break;
}
case ']':
{
if ((S.empty()) || '[' != S.top())
{
return false;
}
else
{
S.pop();
}
break;
}
case '}':
{
if ((S.empty()) || '{' != S.top())
{
return false;
}
else
{
S.pop();
}
break;
}
default:
break;
}
}
return S.empty();
}
bool isValid(string s) {
return parent(s.c_str(),0,s.size()-1);
}
};
本文深入探讨了括号匹配算法的实现,通过使用C++ STL中的stack标准库,设计了一个简洁高效的解决方案。该算法能够处理多种类型的括号,包括圆括号、方括号和花括号,并确保所有括号正确闭合。
537

被折叠的 条评论
为什么被折叠?



