题目如下:
解题思路:
如果只包括一种括号,那么采用计数器方法进行匹配即可即可。但是本题包括 ‘ ( ’、‘ [ ’、‘ { ’ 三种括号,因此需要考虑不同括号出现的位置,采用计数器的方法行不通。所以最好的方法是采用 栈 来解决:
- 初始化栈 S。
- 一次处理表达式的每个括号。
- 如果遇到开括号,将其存入栈顶即可,稍后处理。
- 如果遇到闭括号,那么检查栈顶元素。如果栈顶的元素是一个
相同类型
的
左括号,那么将它从出站并继续处理下一个括号。否则,这意味着 表达式无效 。 - 如果到最后栈中仍然剩有元素,也意味着 表达式无效 。
代码如下:
class Solution {
public:
bool isValid(string s) {
stack<char> ss; //声明栈
int length = s.size();
for(int i = 0; i < length; i++)
{
if(ss.empty()){
ss.push(s[i]);
}
//出栈
else if(s[i] == ')' && ss.top() == '('){
ss.pop();
}
else if(s[i] == ']' && ss.top() == '['){
ss.pop();
}
else if(s[i] == '}' && ss.top() == '{'){
ss.pop();
}
//入栈
else{
ss.push(s[i]);
}
}
if(ss.empty())
return true;
else
return false;
}
};