首先说一下思路:定义一个栈s,然后遍历字符串str,遇到左括号就入栈,遇到右括号就去栈中寻找最近的左括号,看是否匹配。
char leftOf(char c)
{
if (c == '}') return '{';
if (c == ']') return '[';
return ')';
}
bool isValid(string str)
{
stack<char> s;
for (int i = 0; i < str.length(); i++)
{
//遇到左括号
if (str[i] == '(' || str[i] == '[' || str[i] == '{')
{
s.push(str[i]);
}
else //遇到右括号
{
//括号配对成功
if (!s.empty() && leftOf(str[i]) == s.top())
{
s.pop();
}
else
{
return false;
}
}
}
return s.empty();
}
判断括号的合法性可以帮助我们理解栈这种数据结构,增强学习的实用性