题目描述
给定一个嵌套的括号序列,含有 ( ) [ ] { } 三种括号,判断序列是否合法。
样例
“()” 和 “()[]{}” 是合法的;
“(]” 和 “([)]” 不是合法的。
算法
(栈结构) O(n)O(n)
使用栈数据结构:
- 遇到左括号,需要压栈。
- 遇到右括号,判断栈顶是否和当前右括号匹配;若不匹配则返回false,否则匹配弹出栈顶。
- 最后判断栈是否为空;若为空则合法,否则不合法。
思路
使用栈的特性完美做这道题,技巧在于不匹配的情况,除去不匹配都是匹配的情况,不匹配有两种情况,匹配错误(},,括号没有匹配完{
{
{
{
{,或者}}}}}},当栈无法配对则失效,当最后栈不空也失效
学习stack的基本操纵
c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO)
使用该容器时需要包含#include头文件;
定义stack对象的示例代码如下:
stacks1;
stacks2;
stack的基本操作有:
1.入栈:如s.push(x);
2.出栈:如 s.pop().注意:出栈操作只是删除栈顶的元素,并不返回该元素。
3.访问栈顶:如s.top();
4.判断栈空:如s.empty().当栈空时返回true。
5.访问栈中的元素个数,如s.size();
class Solution {
public:
bool isValid(string s) {
stack<char> bra;